在Java中,我想检查一个字符串是否存在于List<String> myList
。
这样的事情:
if(myList.contains("A")){
//true
}else{
// false
}
问题是myList可以包含未修剪的数据:
{' A', 'B ', ' C '}
如果我的项目'B'
在列表中,我希望它返回true。我该怎么做?我想避免循环结构。
答案 0 :(得分:55)
使用Java 8 Stream API:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
答案 1 :(得分:45)
您需要迭代列表并致电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))
答案 2 :(得分:14)
您可以使用正则表达式在一行中执行此操作:
if (myList.toString().matches(".*\\bA\\b.*"))
此代码应该可以很好地运行。
.matches("\\[.*\\b" + word + "\\b.*]")
我在每一端添加了[
和]
,以防止在搜索字词在开头/结尾包含开/关方括号时出现误报匹配。
答案 3 :(得分:6)
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;
答案 4 :(得分:3)
试试这个:
for(String str: myList) {
if(str.trim().equals("A"))
return true;
}
return false;
您需要使用str.equals
或str.equalsIgnoreCase
代替contains
,因为contains
中的string
与contains
中的List
不同1}}
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
答案 5 :(得分:2)
您可以使用近似字符串匹配库来执行此操作,例如: SecondString,但这几乎肯定是矫枉过正 - 只需使用提供的一个for-loop答案。
答案 6 :(得分:2)
您可以使用自己的代码。如果您不想使用上述循环结构,则无需使用循环结构。只有您必须集中精力删除空间或修剪列表的字符串。
如果您使用的是Java8,则只需使用代码的单行来修剪String:
myList = myList.stream().map(String :: trim).collect(Collectors.toList());
以上一行的重要性是,将来您也可以使用列表或设置。 现在,您可以使用自己的代码:
if(myList.contains("A")){
//true
}else{
// false
}