【问题标题】:Java, return if trimmed String in List contains StringJava,如果 List 中修剪的 String 包含 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]:stackoverflow.com/questions/6428005/…
  • @Bohemian:在列表中使用toString() 并使用单词边界检查的正则表达式方法确实很容易出错。如果列表元素包含非单词字符怎么办。如何使用正则表达式找出这种列表?

标签: java arrays string list


【解决方案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"));
            

            【讨论】:

            【解决方案7】:

            您可以使用自己的代码。如果您不想使用上面所说的循环结构,则不需要使用循环结构。只有您必须集中精力来删除空间或修剪列表的字符串。

            如果您使用的是 java8,您可以使用单行代码简单地修剪字符串:

            myList = myList.stream().map(String :: trim).collect(Collectors.toList());
            

            上面这行的重要性在于,以后你也可以使用List或者set。 现在您可以使用自己的代码了:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-11-15
              • 1970-01-01
              • 1970-01-01
              • 2013-01-16
              • 2010-12-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多