比较两个字符串A和B,确定A中是否包含B中所有的字符

最近在刷题,碰到一个判断字符串中字符出现的问题,问题如下:

比较两个字符串A和B,确定A中是否包含B中所有的字符。

如题

给出 A = "ABCD" B = "ACD",返回 true 

给出 A = "ABCD" B = "AABC", 返回 true 

在 A 中出现的 B 字符串里的字符不需要连续或者有序。第二个也为true的原因是因为AA出现两次,但确实都在A字符串中出现了。

第一次看到题目时没有仔细,看成B可以作为A的子串,因而想这个直接就可以contains方法来确定

1  String a="ABCDEFG";
2  String b="ABC";
3  String c="ACD";
4 5  boolean b1=a.contains(b);
6  boolean b2=a.contains(c);
7  System.out.println(b1);
8  System.out.println(b2);

如此很明显结果为

 true 

 false 

但仔细审题后,发现的是在A中包含B中的所有字符,这样的话,那么第二个也应该为true才对。

那么这样,根据上面的代码,则考虑只需要在A中用contains方法判断一下所有B中的字符是否存在,若全部存在,则为true,否则即为false。最终实现代码如下:

 1 public static boolean containsAllChars(String a, String b) {
 2       //a,b 若为空,则没有比较的意义了。
 3       if(a==null) {
 4           return false;
 5       }
 6       if(b==null) {
 7           return false;
 8       }
 9       char[] bChars=b.toCharArray();
10     //提供包含标示,默认为包含
11       boolean flag=true;
12       for(char c:bChars) {
13           //+号仅仅是将c转换成字符串。也可以用c.toString();替代。
14           if(!a.contains(c+"")) {
15               //只要有一个字符不包含在a串中,则置结果为false并退出循环。
16               flag=false;
17               break;
18           }
19       }
20       return flag;
21   }

接下来,提供几个字符串进行验证:

 1 String a="ABCD EFG";
 2 String b="ABBC";
 3 String c="HACD";
 4 String d="AB C";
 5 boolean b1=TestStrContains.containsAllChars(a, b);
 6 boolean b2=TestStrContains.containsAllChars(a, c);
 7 boolean b3=TestStrContains.containsAllChars(a, d);
 8 System.out.println(b1);
 9 System.out.println(b2);
10 System.out.println(b3);

案例中,包含有空格,同时对校验的B字符串也含三个case,

1、重复字符

2、不存在的字符。

3、空格。

对应输出的结果为:

 true false true 

猜你喜欢

转载自www.cnblogs.com/yehhuang/p/9458852.html