如何独立于char顺序检查两个String
对象的相等性?
示例:
checkEq(A*B'*C,B'*A*C) has to return true
checkEq(A*B'*C,A*B*C) ----> false... etc
答案 0 :(得分:5)
按字符对字符串进行排序并比较:
char[] a1 = s1.toCharArray();
Arrays.sort(a1);
char[] a2 = s2.toCharArray();
Arrays.sort(a2);
return Arrays.equals(a1,a2);
答案 1 :(得分:1)
尝试使用java str.split
方法。例如,str.split("*")
将为您提供元素A,B,C或B,A,C的数组。然后只需对它们进行排序并通过它们进行一次循环来比较它们。
String str1 = "A*B*C";
String str2 = "C*A*B";
// split strings into arrays
String[] array1 = str1.split("*");
String[] array2 = str2.split("*");
// sort each array
Arrays.sort(array1);
Arrays.sort(array2);
// compare arrays
for( i=0; i<array1.length; i++ ){
if(array1[i] == array2[i]){
return false; // OR, do whatever it is you want to do here.
}
}
答案 2 :(得分:0)
您可以将单个字符放入Set<Character>
或Map<Character, Integer>
(如果您关心同一字符的倍数,请使用后者)。然后通过两种方式计算设定差异将告诉您一个字符串中是否存在不出现在另一个字符串中的字符(因此它们不相等)。对于地图,计算密钥集上的集合差异(如上所述),如果相等,则每个对应值的差异 - 如果全部为0,则两个字符串在问题的相等意义上是相等的。