包含在Java中无法正常工作的方法

时间:2018-10-27 15:45:32

标签: java filter contains hashset

我想检查字符串是否包含指定的单词。如果字符串包含指定的单词,我不想打印该单词。现在可能会有多余的单词,但是我只会打印除我的预定义单词列表以外的唯一单词,例如“流量”,“折叠”。 为此,我使用Set来存储唯一的字符串,并使用if-statement和contains进行检查。但是它不能正常工作。尽管我的预定义限制性词是“流量”,但我的程序仍会与所有单词一起显示流量。似乎filter / contains方法无法正常工作。 附注:我将所有单词都转换为小写,以避免区分大小写。下面是我的代码。请帮我了解什么是错的?我正在使用Java代码。

input{
   width:50px;
}

3 个答案:

答案 0 :(得分:1)

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

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

因为要打印的单词不包含单词_1或单词_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);
        }
    }
}

答案 1 :(得分:1)

  

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

使用&&代替||

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

答案 2 :(得分:0)

方便的方法-流API

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