在Java中,我想检查一个字符串是否存在于List<String> myList
中。Java,返回如果List包含字符串
事情是这样的:
if(myList.contains("A")){
//true
}else{
// false
}
问题是myList中可以包含未修剪的数据:
{' A', 'B ', ' C '}
我想它,如果我的项目'B'
在列表返回true。我应该怎么做?我想避免循环结构。
在Java中,我想检查一个字符串是否存在于List<String> myList
中。Java,返回如果List包含字符串
事情是这样的:
if(myList.contains("A")){
//true
}else{
// false
}
问题是myList中可以包含未修剪的数据:
{' A', 'B ', ' C '}
我想它,如果我的项目'B'
在列表返回true。我应该怎么做?我想避免循环结构。
您需要遍历列表,并呼吁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))
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;
您可以使用一个近似串匹配库要做到这一点,例如, SecondString,但这几乎肯定是矫枉过正 - 只是使用其中一个for循环回答。
您可以通过使用正则表达式做一个单行:
if (myList.toString().matches(".*\\bA\\b.*"))
此代码应执行得非常好。
顺便说一句,你可以从一个变量构建正则表达式,像这样:
.matches("\\[.*\\b" + word + "\\b.*]")
我加入[
和]
到每一端,以防止当搜索词包含一个开放的假阳性匹配/在开始/结束处关闭方括号。
试试这个:
for(String str: myList) {
if(str.trim().equals("A"))
return true;
}
return false;
您需要使用str.equals
或str.equalsIgnoreCase
代替contains
因为contains
在string
作品不一样contains
在List
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
与Java 8个流API:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
AFAIK in vanilla JDK,no。我猜想在Java 8中,闭包你将在一行中实现这一点。 – 2013-04-25 15:30:50
我该如何实现它。无需编写循环条件。实际上,它会在内部检查每个字符串。但我希望它在单行中;) – Reddy 2013-04-25 15:32:18
正如我所说的,你无法用简单的Java在单行**中实现这个**。有些库可以帮助你完成这项工作。 – 2013-04-25 15:33:35