2012-03-25 82 views
0

如何检查两个对象的相等性与字符顺序无关?在java中检查两个字符串的相等性

实例:使用java str.split方法

checkEq(A*B'*C,B'*A*C) has to return true 
checkEq(A*B'*C,A*B*C) ----> false... etc 
+5

你的代码段是不是有效的Java,这使得它很难理解你在寻找什么。 – 2012-03-25 18:38:34

+1

这不是字符串相等。您只需检查字符串a和字符串b是否由任意顺序的完全相同的字符组成。 – Perception 2012-03-25 18:40:18

+0

'checkEq(A * B'* C,A'* B * C)'应该返回true还是false?你能解释一下你的算法是什么,或者你试图解决这个问题的具体问题是什么? – 2012-03-25 19:05:42

回答

1

尝试。例如,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. 
    } 
} 
0

你可以把单个字符到Set<Character>Map<Character, Integer>(使用后者,如果你关心的同一性质的倍数)。然后通过两种方式计算集合差异会告诉你一个字符串中是否有字符不出现在另一个字符串中(因此它们不相等)。对于映射,计算关键集上的集合差异(如上所述),如果相等,则每个相应值的差值 - 如果全部为0,则两个字符串在问题的平等意义上相等。

5

排序字符串并比较:

char[] a1 = s1.toCharArray(); 
    Arrays.sort(a1); 
    char[] a2 = s2.toCharArray(); 
    Arrays.sort(a2); 
    return Arrays.equals(a1,a2); 
相关问题