2012-06-23 145 views
0

我試圖將兩個字符串相互比較。一個包含例如:比較兩個字符串中的值

String x =" aa bb cc dd ee " 

,另一種:

String y =" aa bb " 

現在,我想這樣做

if (any values from String x EXISTS IN String y) 

if (y.matches(???)){System.out.println("true");} 
else{System.out.println("false");} 

我知道我可以使用正則表達式做相反,像這樣:

if (x.matches(".*"+y+".*")){do something} 

B ut我想知道是否有任何方法來檢查字符串x中的任何值是否與String y匹配。

+0

如果你的代碼返回true,如果'x =「aa bb cc dd ee」'和'y = ee aa'? – Makoto

回答

2

假設您稱之爲「字符串中的值」是空格之間的一對字符,將兩個字符串拆分以將它們轉換爲一組值(Set<String>),然後使用Set方法計算出您想要的值(containsAll()removeAll(),retainAll()等)。

+0

不,這只是我從文件中讀取數據的一個示例,它不能簡單地將其拆分 –

+0

然後解釋您稱之爲「值」的內容。但我不明白你怎麼不能從一個文件構成一組單詞。 –

+1

我仍然認爲你應該只有兩套,並比較這些套。唯一的區別是您應該使用Date來表示日期,而不是String。順便說一句,你剛剛接受了一個答案,正是我的建議,在我的答案中做的(但以一個次優的方式)。 –

1

如果您試圖查看String x是否在字符串y中某處,請使用.contains(String str)方法。

如果您試圖確定字符串的空格分隔部分是否包含在y中,那麼您將需要拆分,然後在拆分操作的每個部分都包含這些部分。

+0

.contain不起作用,因爲sting x中存在另一個不存在的值。 –

+0

這就是爲什麼我建議將x分割成空白分隔的部分,然後在每個部分使用contains。就像JB Nizet在下面的答案中提出的那樣。 –

1
String x_trimmed = x.trim(); 
String y_trimmed = y.trim(); 

String[] x_elements = x_trimmed.split("\\s+"); 
String[] y_elements = y_trimmed.split("\\s+"); 

Set<String> x_elementsSet = new HashSet<String>(Arrays.asList(x_elements)); 
Set<String> y_elementsSet = new HashSet<String>(Arrays.asList(y_elements)); 

for (String x : x_elementsSet) { 
    if (y_elementsSet.contains(x)) { 
     System.out.println("true"); 
    } else { 
     System.out.println("false"); 
    } 
} 
+0

爲什麼不使用String.trim()來修剪?爲什麼使用List而不是Set?爲什麼在每次迭代時將數組轉換爲List? –

+0

@JBNizet:對!非常感謝提示! :) – user278064

+0

只因爲你命名變量xxxSet不會使它成爲一個Set。使用java.util.HashSet而不是java.util.List。它在查找時更加高效(O(1)而不是O(n))。 –