2013-04-25 37 views
31

在Java中,我想检查一个字符串是否存在于List<String> myList中。Java,返回如果List包含字符串

事情是这样的:

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

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

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

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

+0

AFAIK in vanilla JDK,no。我猜想在Java 8中,闭包你将在一行中实现这一点。 – 2013-04-25 15:30:50

+0

我该如何实现它。无需编写循环条件。实际上,它会在内部检查每个字符串。但我希望它在单行中;) – Reddy 2013-04-25 15:32:18

+0

正如我所说的,你无法用简单的Java在单行**中实现这个**。有些库可以帮助你完成这项工作。 – 2013-04-25 15:33:35

回答

33

您需要遍历列表,并呼吁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)) 
4
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; 
2

您可以使用一个近似串匹配库要做到这一点,例如, SecondString,但这几乎肯定是矫枉过正 - 只是使用其中一个for循环回答。

14

您可以通过使用正则表达式做一个单行:

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

此代码应执行得非常好。


顺便说一句,你可以从一个变量构建正则表达式,像这样:

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

我加入[]到每一端,以防止当搜索词包含一个开放的假阳性匹配/在开始/结束处关闭方括号。

2

试试这个:

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

您需要使用str.equalsstr.equalsIgnoreCase代替contains因为containsstring作品不一样containsList

List<String> s = Arrays.asList("BAB", "SAB", "DAS"); 
s.contains("A"); // false 
"BAB".contains("A"); // true 
27

与Java 8个流API:

List<String> myList = Arrays.asList(" A", "B ", " C "); 
return myList.stream().anyMatch(str -> str.trim().equals("B")); 
相关问题