检查2个字符串是否包含相同的字符?

有没有办法检查两个字符串是否包含相同的字符。 例如,

abc, bca -> true aaa, aaa -> true aab, bba -> false abc, def -> false 

将每个字符串转换为char [],对该数组进行排序,然后比较两者。 简单。

 private boolean sameChars(String firstStr, String secondStr) { char[] first = firstStr.toCharArray(); char[] second = secondStr.toCharArray(); Arrays.sort(first); Arrays.sort(second); return Arrays.equals(first, second); } 

一个非常简单但不是非常有效的方法是将String转换为char数组并在它们上使用java.util.Arrays.sort,返回String并比较相等性。 如果你的字符串少于几千个字符,那应该是非常好的。

如果你有几兆字节的字符串,你可能想要为每个字符创建一个数组(使用其代码作为索引),在一个字符串上有一个传递,在每个字符的计数上添加一个,在第二个字符串上添加一个删除一个字符串。 如果您在第二次传球期间的任何时间点都低于0,则它们没有相同的字符。 当您完成第二个字符串没有错误时,如果它们具有相同的长度(您应该首先检查它),您确定它们具有相同的字符。
第二种方法比排序字符串要复杂得多,如果你想使用unicode字符串,它需要一个大数组,但是如果你只使用ascii集的128个字符就可以了,而且速度要快得多。
如果你的字符串中没有数百万个字符,请不要理会。 对字符串进行排序要容易得多,而且对于只有几十个字符的字符串来说并不会明显变慢。

作为(挑剔;-))旁注:

请注意,此处提出的解决方案仅适用于由Unicode的基本多语言平面 (BMP)中的字符组成的字符串。

BMP外部的字符表示为Stringchar ,因此您需要特别注意,以便将这些String保持在一起。 有关详细信息,请参阅java.lang.Character的Javadocs。

幸运的是,BMP之外的大多数角色都很奇特。 甚至大多数日本人和中国人都在BMP ……

也许这不是最快的答案,但它必须是最短的答案。

 boolean hasSameChar(String str1, String str2){ for(char c : str1.toCharArray()){ if(str2.indexOf(c) < 0 ) return false; } for(char c : str2.toCharArray()){ if(str1.indexOf(c) < 0 ) return false; } return true; } 

您可以将字符串转换为char数组,对数组进行排序,然后比较数组:

 String str1 = "abc"; String str2 = "acb"; char[] chars1 = str1.toCharArray(); char[] chars2 = str2.toCharArray(); Arrays.sort(chars1); Arrays.sort(chars2); if(Arrays.equals(chars1,chars2)) { System.out.println(str1 + " and " + str2 + " are anagrams"); } else { System.out.println(str1 + " and " + str2 + " are not anagrams"); } 

考虑为给定的String创建签名。 使用计数和字符。

a-count:b-count:c-count:.....:z-count:如果需要,可以扩展为大写)。

然后比较签名。 对于非常大的字符串,这应该更好地扩展。

作为快捷方式,检查长度。 如果它们不匹配,则无论如何都返回false。

这里:

  String str1 = "abc"; String str2 = "cba"; /* create sorted strings */ /* old buggy code String sorted_str1 = new String( java.utils.Arrays.sort(str1.toCharArray()) ); String sorted_str2 = new String( java.utils.Arrays.sort(str2.toCharArray()) ); */ /* the new one */ char [] arr1 = str1.toCharArray(); char [] arr2 = str2.toCharArray(); java.utils.Arrays.sort(arr1); java.utils.Arrays.sort(arr2); String sorted_str1 = new String(arr1); String sorted_str2 = new String(arr2); if (sorted_str1.equals( sorted_str2 ) ) { /* true */ } else { /* false */ } 

这里:

 import java.util.Arrays; 

public class CompareString {

 String str = "Result"; String str1 = "Struel"; public void compare() { char[] firstString = str.toLowerCase().toCharArray(); char[] secondString = str1.toLowerCase().toCharArray(); Arrays.sort(firstString); Arrays.sort(secondString); if (Arrays.equals(firstString, secondString) == true) { System.out.println("Both the string contain same charecter"); } else { System.out.println("Both the string contains different charecter"); } } public static void main(String[] args) { CompareString compareString = new CompareString(); compareString.compare(); } 

}