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

Contains method not working properly in Java

我想检查一个字符串是否包含指定的单词。如果字符串包含指定的单词,我不想打印它。现在可能有多余的单词,但我只会打印不包括我的预定义单词列表的唯一单词,例如 "traffic"、"collapse"。 为此,我使用 Set 来存储唯一字符串并使用 if 语句检查它并包含。但它不能正常工作。虽然我预定义的限制性词是 "traffic" 但我的程序仍然会打印流量以及所有词。 filter/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);
            }
        }

    }

}

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

 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);
        }
    }
}

If the string contains that specified word i don't want to print that.

使用&&代替||

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

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

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