搜索字符串中的关键字

d4so4syb  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(450)

这个问题在这里已经有答案了

java:string.contains匹配精确单词(7个答案)
两天前关门了。
我想编写一个方法,如果在字符串中找到关键字,则返回true,否则返回false。我知道如何做到这一点,但当关键字是像“猫”和字符串是“有一个线索毛虫”返回真的,即使猫不在字符串中。我做错什么了?

public boolean containsWord(String message, String keyWord) {
    if(message.contains(keyWord)) {
        return true;
    }
    return false;
}
qni6mghb

qni6mghb1#

你可以用 regex 来解决你的问题。你想找一只周围没有人物的猫。如果用正则表达式翻译,您将得到:

\\Wcat\\W

在这里 \W 表示非单词字符。非单词字符由除 [a-zA-z_0-9] .
所以基本上我们要找5个字符,一个非单词字符,后跟c-a-t,最后一个字符也是非单词字符。
下面是执行此操作的代码:

String str = "My favourite animal are cat, dog and mice.";

//Set the regex
Pattern pattern = Pattern.compile("\\Wcat\\W");
//Set the string
Matcher matcher = pattern.matcher(str);

//Check for a match
if (matcher.find()) System.out.println("Word found at index: " + matcher.start());
else System.out.println("No match found!");

输出:

Word found at index: 23

我希望我帮助过你。

yqlxgs2m

yqlxgs2m2#

我会避免将字符串作为数组运行。
这将浪费时间,尤其是在长文本上,当你必须运行的时候。但是您可以在开头添加一个空字符,并在开头和结尾使用空字符串搜索关键字。

public boolean containsWord(String message, String keyWord) {
        return " ".concat(message).concat(" ").contains(" "+keyWord+" ");
    }

在一条线上。

7uzetpgm

7uzetpgm3#

有很多方法可以解决这个问题。问题是,当您使用contains()时,它会在完整字符串中查找该子文本,但您只希望查看单词。
因此,使用 space 作为分隔符。然后检查数组/列表是否包含单词。

public static void main (String ...args) {
        String input = "There is a caterpillar on a lead";
        String wordToFind = "cat";

        String[] split = input.split(" ");
        Arrays.stream(split).forEach(System.out::println);
        boolean exists = Arrays.asList(split).contains(wordToFind);
        System.out.println(exists);
}

相关问题