2016-12-12 44 views
1

是否可以像這樣比較2個字符串。如何比較java中的2條語句

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 

在java中通常不是字符串equals

我想用ArrayListarray通過空格分割字符串並進行比較。

是否有其他方法可用? 哪一個更好?

我想回答富巴ABC酒吧ABC富是相同的。我想知道兩個詞是否出現在同一個詞中。

+0

你想比較什麼?這個詞? – ItamarG3

+1

是的,然後使用每個循環,並檢查array2是否包含array1中的每個單詞 – XtremeBaumer

+2

分詞和排序。比較數組是相同的 –

回答

3

如果你的字符串表示詞的集合(即沒有重複的集合),自然的解決方案是使用Sets

String test1 = "foo bar abc"; 
    String test2 = "bar abc foo"; 

    HashSet<String> set1 = new HashSet<>(Arrays.asList(test1.split(" "))); 
    HashSet<String> set2 = new HashSet<>(Arrays.asList(test2.split(" "))); 

    System.out.println(set1.equals(set2)); 
+1

如果'test2 =「bar abc abc bar foo foo」'?如果與測試1相比,這應該是真的還是假? –

+0

該問題應該針對OP。我想他在這種情況下認爲他們是平等的。但我在這裏可能是錯的... –

+0

我同意 - 但這只是值得一提的。從技術上說,同樣的詞在那裏,所以如果重複不重要,這是好的 –

1

通過將兩個字符串拆分爲不同的單詞(使用正則表達式),您可以從每個字符串中創建一個列表。
然後你可以檢查第二列表包含在第一列表中的值:

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 
List<String> list1 =Arrays.asList(test1.split("\\s+")); 
List<String> list2 =Arrays.asList(test2.split("\\s+")); 
if(!list2.containsAll(list1)) 
    return false;//or print out "false", whichever suits you 
+0

Downvoter請詳細說明 – ItamarG3

+1

我不是downvoter,但我認爲,因爲你只給出沒有任何解釋的代碼。 –

+0

@ cricket_007編輯的代碼...我完全忘了添加一個解釋O.O – ItamarG3

0

這是許多可能性之一:

import java.util.Arrays; 

(...) 

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 

if (Arrays.asList(test1.split("\\s+")).containsAll(Arrays.asList(test2.split("\\s+")))) { 
    return true; 
} else { 
    return false; 
} 
2

您可以分割兩個字符串,排序結果數組和比較他們。

public static void main(String[] args) { 

    String test1 = "foo bar abc"; 
    String test2 = "bar abc foo"; 

    System.out.println(method(test1, test2)); 
} 


private static boolean method(String test1, String test2){ 
    String[] tokens1 = test1.split(" "); 
    String[] tokens2 = test2.split(" "); 

    Arrays.sort(tokens1); 
    Arrays.sort(tokens2); 

    return Arrays.equals(tokens1, tokens2); 
}