2014-09-11 81 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:比较正确的字符串,包括空格。