Java,如果List包含String则返回

Red*_*ddy 51 java arrays string list

在Java中,我想检查一个String是否存在于List<String> myList.

像这样的东西:

if(myList.contains("A")){
    //true
}else{
    // false
}
Run Code Online (Sandbox Code Playgroud)

问题是myList可以包含未修剪的数据:

{'  A', 'B  ', '  C  '}
Run Code Online (Sandbox Code Playgroud)

如果我的项目'B'在列表中,我希望它返回true .我该怎么做?我想避免循环结构.

rog*_*zes 70

使用Java 8 Stream API:

List<String> myList = Arrays.asList("  A", "B  ", "  C  ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
Run Code Online (Sandbox Code Playgroud)

  • @vikramvi 是的,这种形式称为 lambda 函数,自 Java 8 起可用。 https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html (2认同)

anu*_*ava 49

您需要迭代列表并呼叫String#trim搜索:

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

或者如果要执行忽略大小写搜索,则使用:

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

// inside the loop
if(str.trim().toLowerCase().contains(search))
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 14

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

if (myList.toString().matches(".*\\bA\\b.*"))
Run Code Online (Sandbox Code Playgroud)

这段代码应该表现得很好.


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

.matches("\\[.*\\b" + word + "\\b.*]")
Run Code Online (Sandbox Code Playgroud)

当搜索项在开头/结尾包含一个打开/关闭方括号时,我添加[并添加]到每一端以防止误报匹配.


Aza*_*Aza 7

String search = "A";
for(String s : myList)
    if(s.contains(search)) return true;
return false;
Run Code Online (Sandbox Code Playgroud)

这将迭代列表中的每个字符串,并检查它是否包含您正在查找的字符串.如果它只是你想要陷阱的空间,你可以这样做:

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

在搜索之前,它将首先用空字符串替换空格.此外,如果您只想先修剪字符串,您可以:

String search = "A";
for(String s : myList)
    if(s.trim().contains(search)) return true;
return false;
Run Code Online (Sandbox Code Playgroud)