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在一行中实现这一点。有一些库可以帮助您完成这项工作。 [检查 ArrayList 是否包含字符串的一部分][1] [1]:***.com/questions/6428005/… @Bohemian:在列表中使用toString() 并使用单词边界检查的正则表达式方法确实很容易出错。如果列表元素包含非单词字符怎么办。如何使用正则表达式找出这种列表? 【参考方案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.equalsstr.equalsIgnoreCase 而不是contains,因为string 中的containsList 中的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 则返回的主要内容,如果未能解决你的问题,请参考以下文章

java中map可以放在list里吗

如何修剪 std::string?

如何在Android中启用String修饰方法

C#中List<List<string>>要怎么处理?

java 怎样合并两个list

Java 求解修剪二叉搜索树