2014-09-11 59 views
0

我很新的Java,我有一個問題,我似乎無法找到答案。 我想知道我傳遞的語言是否存在於我的列表中。Java的一些麻煩ArrayList.contains()

String lang = "fr, de, gb, nl, se, es"; 
List<String> result = new ArrayList<String>(); 
String[] languages = lang.split(","); 
result = Arrays.asList(languages); 
if (result.contains("de")) { 
    return true; 
} else { 
    System.exit(0); 
} 

而這返回false,我不明白爲什麼。

+3

您應該嘗試調試您的代碼 – 2014-09-11 13:03:15

+0

嘗試「德」,因爲這是您的字符串,而不僅僅是de – StackFlowed 2014-09-11 13:06:03

回答

4

你只是在逗號分割,因此你的數組包含前面有空格的字符串。使用此正則表達式,而不是分裂:

lang.split("\\s*,\\s*") 

在一個側面說明,你不需要這些三行:

List<String> result = new ArrayList<String>(); 
String[] languages = lang.split(...); 
result = Arrays.asList(languages); 

所有你需要的是

List<String> result = Arrays.asList(lang.split(...)); 
0
"fr, de, gb, nl, se, es" 

您正在檢查de而不是<space>de

+0

這是對問題的解釋,現在是解決方案的時候讓這個答案充分。 – Pshemo 2014-09-11 13:05:32

+0

@Pshemo - Marko Toplonik已經完成了.. :) – TheLostMind 2014-09-11 13:06:24

0

您的字符串用「,」分隔。 所以如果你這樣做:

if (result.contains(" de") 

它會工作。

+2

這個*會*工作,但更好的解決方案將改變'split'本身消耗空間。 – Maroun 2014-09-11 13:04:10

0

斯普利特郎字符串之後「,」或刪除空格中的初始化

1

你得到的空間與你的拆分​​,我會使用拆分機智h \\s+這將爲您刪除空白區域。

String lang = "fr, de, gb, nl, se, es"; 
String[] languages = lang.split(",\\s+"); 
List<String> result = Arrays.asList(languages); 
if (result.contains("de")) { 
    System.out.println("Result contains de"); 
} else { 
    System.out.println("Result does not contain de"); 
} 

輸出是

Result contains de 
-2

改變你的字符串這樣

String lang = "fr,de,gb,nl,se,es"; 

或更改像@TheLostMoind說

2

這是因爲數組語言 「包含{ 」FR「,」 de「,」gb「,」nl「,」se「,」es「} 它包含」de「不是」de「。 您可以通過兩種不同的方式更正它, 1:帶「,」的分割語言(語法可能不同)。 2:比較正確的字符串,包括空格。