Java,如果 List 中修剪的 String 包含 String 则返回
Posted
技术标签:
【中文标题】Java,如果 List 中修剪的 String 包含 String 则返回【英文标题】:Java, return if trimmed String in List contains String 【发布时间】:2013-04-19 14:10:09 【问题描述】:在 Java 中,我想检查 List<String> myList
中是否存在字符串。
类似这样的:
if(myList.contains("A"))
//true
else
// false
问题是 myList 可以包含未修剪的数据:
' A', 'B ', ' C '
如果我的项目 'B'
在列表中,我希望它返回 true。我该怎么做?我想避免循环结构。
【问题讨论】:
原版 JDK 中的 AFAIK,没有。我猜在带有闭包的 Java 8 中,您将在一行中实现这一点。 我如何实现它。不写循环条件。事实上,它在内部检查每个字符串。但我希望它在单行中;) 正如我所说的,你不能用简单的Java在一行中实现这一点。有一些库可以帮助您完成这项工作。 [检查 ArrayListtoString()
并使用单词边界检查的正则表达式方法确实很容易出错。如果列表元素包含非单词字符怎么办。如何使用正则表达式找出这种列表?
【参考方案1】:
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】:您需要迭代您的列表并调用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))
【讨论】:
【参考方案3】:您可以使用近似字符串匹配库来执行此操作,例如SecondString,但这几乎可以肯定是矫枉过正 - 只需使用提供的 for-loop 答案之一。
【讨论】:
【参考方案4】:您可以使用正则表达式在一行中完成:
if (myList.toString().matches(".*\\bA\\b.*"))
这段代码应该执行得很好。
顺便说一句,您可以从变量构建正则表达式,如下所示:
.matches("\\[.*\\b" + word + "\\b.*]")
我在每一端添加了[
和]
,以防止当搜索词在开始/结束处包含开/关方括号时出现误报匹配。
【讨论】:
【参考方案5】:试试这个:
for(String str: myList)
if(str.trim().equals("A"))
return true;
return false;
您需要使用str.equals
或str.equalsIgnoreCase
而不是contains
,因为string
中的contains
与List
中的contains
工作方式不同
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
【讨论】:
【参考方案6】:使用 Java 8 流 API:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
【讨论】:
这里的str是什么,它是可变的吗? @vikramvi 是的,这种形式称为 lambda 函数,从 Java 8 开始可用。docs.oracle.com/javase/tutorial/java/javaOO/…【参考方案7】:您可以使用自己的代码。如果您不想使用上面所说的循环结构,则不需要使用循环结构。只有您必须集中精力来删除空间或修剪列表的字符串。
如果您使用的是 java8,您可以使用单行代码简单地修剪字符串:
myList = myList.stream().map(String :: trim).collect(Collectors.toList());
上面这行的重要性在于,以后你也可以使用List或者set。 现在您可以使用自己的代码了:
if(myList.contains("A"))
//true
else
// false
【讨论】:
以上是关于Java,如果 List 中修剪的 String 包含 String 则返回的主要内容,如果未能解决你的问题,请参考以下文章