Содержит метод, не работающий должным образом в Java - PullRequest
0 голосов
/ 27 октября 2018

Я хотел бы проверить, содержит ли строка указанное слово.Если строка содержит указанное слово, я не хочу его печатать.Теперь могут быть лишние слова, но я буду печатать только уникальные слова, исключая мой заранее определенный список слов, например, «трафик», «коллапс».Для этого я использую Set для хранения уникальных строк и проверяю это с помощью оператора if и содержит.Но это не работает должным образом.Хотя мое заранее определенное ограничительное слово - «трафик», но все же моя программа печатает трафик вместе со всеми словами.Кажется, что метод filter / содержит не работает должным образом.PS: я перевел все слова в нижний регистр, чтобы избежать чувствительности к регистру.Ниже мой код.Пожалуйста, помогите мне понять, что не так?Я использую код 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);
            }
        }

    }

}

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

Если строка содержит указанное слово, я не хочу его печатать.

Используйте && вместо ||

 for (String place:placeSet)
        {
            if (!place.contains("traffic") && !place.contains("collapse"))
            {
                System.out.println (place);
            }
        }
0 голосов
/ 27 октября 2018

Удобный для меня способ - потоковый API

    placeSet.stream()
            .filter(p -> !p.contains("traffic"))
            .filter(p -> !p.contains("collapse"))
            .forEach(System.out::println);
0 голосов
/ 27 октября 2018

Если вы хотите напечатать слово, только если оно не содержит ни одного слова из черного списка, условие должно выглядеть следующим образом:

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

Поскольку вы хотите печатать, если слово не содержит word_1или word_1, поэтому оно должно быть NOT (condition1 OR condition2)

В случае нескольких слов, занесенных в черный список, вы также можете работать с множеством:

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