55

In Java, I want to check whether a String exists in a List<String> myList.

Something like this:

if(myList.contains("A")){
    //true
}else{
    // false
}

The problem is myList can contain un-trimmed data:

{'  A', 'B  ', '  C  '}

I want it to return true if my item 'B' is in the list. How should I do this? I would like to avoid a looping structure.

4

7 回答 7

85

使用 Java 8 流 API:

List<String> myList = Arrays.asList("  A", "B  ", "  C  ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
于 2015-11-06T01:41:56.130 回答
53

您需要迭代您的列表并调用String#trim搜索:

String search = "A";
for(String str: myList) {
    if(str.trim().contains(search))
       return true;
}
return false;

或者,如果您想执行忽略大小写搜索,请使用:

search = search.toLowerCase(); // outside loop

// inside the loop
if(str.trim().toLowerCase().contains(search))
于 2013-04-25T15:33:28.057 回答
14

您可以使用正则表达式在一行中完成:

if (myList.toString().matches(".*\\bA\\b.*"))

这段代码应该执行得很好。


顺便说一句,您可以从变量构建正则表达式,如下所示:

.matches("\\[.*\\b" + word + "\\b.*]")

当搜索词在开始/结束处包含开/关方括号时,我在每一端添加了[]以防止误报匹配。

于 2013-04-25T20:44:00.040 回答
7
String search = "A";
for(String s : myList)
    if(s.contains(search)) return true;
return false;

这将遍历列表中的每个字符串,并检查它是否包含您要查找的字符串。如果它只是您想要捕获的空间,您可以这样做:

String search = "A";
for(String s : myList)
    if(s.replaceAll(" ","").contains(search)) return true;
return false;

这将在搜索之前首先用空字符串替换空格。此外,如果您只想先修剪字符串,您可以执行以下操作:

String search = "A";
for(String s : myList)
    if(s.trim().contains(search)) return true;
return false;
于 2013-04-25T15:31:36.303 回答
4

尝试这个:

for(String str: myList) {
    if(str.trim().equals("A"))
       return true;
}
return false;

您需要使用str.equalsorstr.equalsIgnoreCase代替,contains因为containsin works 与instring不一样containsList

List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
于 2013-04-25T20:49:21.987 回答
3

您可以使用自己的代码。如果您不想使用上面所说的循环结构,则不需要使用循环结构。只有您必须专注于删除空间或修剪列表的字符串。

如果您使用的是 java8,您可以使用代码的单行简单地修剪字符串:

myList = myList.stream().map(String :: trim).collect(Collectors.toList());

上面这行的重要性在于,将来你也可以使用 List 或 set。现在您可以使用自己的代码:

if(myList.contains("A")){
    //true
}else{
    // false
}
于 2019-08-31T17:58:42.723 回答
2

您可以使用近似字符串匹配库来执行此操作,例如SecondString,但这几乎可以肯定是矫枉过正 - 只需使用提供的 for 循环答案之一。

于 2013-04-25T15:36:32.533 回答