【问题标题】:Contains method not working properly in Java包含在 Java 中无法正常工作的方法
【发布时间】:2019-04-01 02:13:54
【问题描述】:

我想检查一个字符串是否包含指定的单词。如果字符串包含指定的单词,我不想打印它。现在可能有多余的单词,但我只会打印不包括我的预定义单词列表的唯一单词,例如“traffic”、“collapse”。 为此,我使用 Set 来存储唯一的字符串,并使用 if 语句和 contains 进行检查。但它不能正常工作。尽管我预定义的限制性词是“流量”,但我的程序仍然会打印流量以及所有单词。似乎过滤器/包含方法无法正常工作。 P.S:我将所有单词都转换为小写以避免区分大小写。下面是我的代码。请帮我理解什么是错的?我正在使用 Java 代码。

import java.util.HashSet;
import java.util.Set;


public class SetTest {

    public static void main(String[] args) {
        Set<String> placeSet=new HashSet<String> ();

        String s1="traffic";
        String s2="mumbai";
        String s3="Mumbai";
        String s4="roadcollapse";

        placeSet.add(s1.toLowerCase());
        placeSet.add(s2.toLowerCase());
        placeSet.add(s3.toLowerCase());
        placeSet.add(s4.toLowerCase());

        for (String place:placeSet)
        {
            if (!place.contains("traffic") || !place.contains("collapse"))
            {
                System.out.println (place);
            }
        }

    }

}

【问题讨论】:

  • 尝试将||替换为&amp;&amp;

标签: java filter contains hashset


【解决方案1】:

如果字符串包含我不想打印的指定单词 那个。

使用&amp;&amp; 而不是||

 for (String place:placeSet)
        {
            if (!place.contains("traffic") && !place.contains("collapse"))
            {
                System.out.println (place);
            }
        }

【讨论】:

    【解决方案2】:

    如果您只想打印不包含任何列入黑名单的单词,则条件应如下所示:

     for (String place:placeSet)
        {
            if (!(place.contains("traffic") || place.contains("collapse"))) {
                System.out.println (place);
            }
        }
    

    因为要打印如果word不包含word_1或word_1,所以应该是NOT (condition1 OR condition2)

    如果有多个列入黑名单的单词,您也可以使用 Set:

    public static void main(String[] args) {
        Set<String> blacklist = Stream.of("traffic","collapse").collect(Collectors.toSet());
        ...
        for (String place:placeSet) {
            if (blacklist.stream().noneMatch(place::contains)) {
                System.out.println (place);
            }
        }
    }
    

    【讨论】:

    • 太棒了!!现在工作。谢谢贝里。事实上用 && 替换 II 也可以。
    • 很高兴我能帮上忙。如果您没有更多问题,请关闭问题。
    【解决方案3】:

    对我来说很方便的方式 - 流 API

        placeSet.stream()
                .filter(p -> !p.contains("traffic"))
                .filter(p -> !p.contains("collapse"))
                .forEach(System.out::println);
    

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2019-03-01
      • 2012-02-20
      • 2015-01-06
      • 1970-01-01
      • 2013-11-08
      相关资源
      最近更新 更多