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