比較兩個字符串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