比较两个字符串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