Java ArrayList.contains()的一些麻烦

时间:2014-09-11 13:01:28

标签: java arraylist

我是Java的新手,我遇到了问题而且我似乎无法找到答案。 我试图找出我传递的语言是否存在于我的列表中。

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,我无法理解原因。

7 个答案:

答案 0 :(得分: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(...));

答案 1 :(得分:2)

那是因为数组语言&#34;包含{&#34; fr&#34;,&#34;德&#34;&#34; GB&#34;&#34; NL&#34;&#34; SE&#34;&#34; ES&#34;} 它包含&#34;德&#34;不是&#34; de&#34;。 你可以用两种不同的方式纠正它, 1:使用&#34;分割语言&#34; (语法可能不同)。 2:比较包括空格在内的正确字符串。

答案 2 :(得分:1)

你得到分割的空格,我会使用\\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

答案 3 :(得分:0)

"fr, de, gb, nl, se, es" 

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

答案 4 :(得分:0)

你的字符串用“,”分隔。 所以如果你这样做:

if (result.contains(" de")

它会起作用。

答案 5 :(得分:0)

在“,”之后拆分lang字符串,或删除初始化

中的空格

答案 6 :(得分:-2)

像这样更改你的字符串

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

或改变@TheLostMoind说