2012-03-25 207 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); 
相關問題