Java 搜索字符串中的关键字
我想写一个方法,如果在字符串中找到关键字,则返回true,否则返回false。我知道了怎么做,但是当关键字类似于“cat”并且字符串是“潜在客户上有一只毛毛虫”时,即使cat不在字符串中,它也会返回true。 我做错了什么Java 搜索字符串中的关键字,java,string,Java,String,我想写一个方法,如果在字符串中找到关键字,则返回true,否则返回false。我知道了怎么做,但是当关键字类似于“cat”并且字符串是“潜在客户上有一只毛毛虫”时,即使cat不在字符串中,它也会返回true。 我做错了什么 public布尔值(字符串消息、字符串关键字){ if(message.contains(关键字)){ 返回true; } 返回false; } 解决这个问题的方法有很多。问题是,当您使用contains()时,它会在完整字符串中查找该子文本,但您只想查看单词 因此,使用空格
public布尔值(字符串消息、字符串关键字){
if(message.contains(关键字)){
返回true;
}
返回false;
}
解决这个问题的方法有很多。问题是,当您使用contains()时,它会在完整字符串中查找该子文本,但您只想查看单词
因此,使用空格
作为分隔符,将字符串拆分为单词列表/数组。然后检查数组/列表是否包含该单词
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);
}
有很多方法可以解决这个问题。问题是,当您使用contains()时,它会在完整字符串中查找该子文本,但您只想查看单词 因此,使用
空格
作为分隔符,将字符串拆分为单词列表/数组。然后检查数组/列表是否包含该单词
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);
}
您可以使用
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
我希望我已经帮了你。你可以使用
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
我希望我已经帮助了您。我将避免将字符串作为数组运行 这将浪费时间,尤其是在长文本上,当你必须浏览时。 但是,您可以在开头添加一个空字符,并在开头和结尾使用空字符串搜索关键字
public布尔值(字符串消息、字符串关键字){
返回“.concat(message).concat(“”)。包含(“+关键字+”);
}
在一行中执行。我会避免将字符串作为数组运行 这将浪费时间,尤其是在长文本上,当你必须浏览时。 但是,您可以在开头添加一个空字符,并在开头和结尾使用空字符串搜索关键字
public布尔值(字符串消息、字符串关键字){
返回“.concat(message).concat(“”)。包含(“+关键字+”);
}
只需一行即可完成。如果看不到您的代码,很难说!添加您尝试过的内容。您考虑过使用吗?您知道为什么它不起作用吗?如果没有看到您的代码,很难说!添加您尝试过的内容。您考虑过使用吗?您知道为什么它不起作用吗?如果字符串是:
one cat,two dog
,我在空格上拆分并搜索cat
,会找到吗?在拆分之前删除特殊字符。如果字符串是:one cat,two dog
,我在空格上拆分并搜索cat
,会找到吗?在拆分之前删除特殊字符。它不适用于一只猫,两只狗。我检查了问题。他在搜索关键词,而不是关键词短语。但是无论如何:将关键字设为关键字.trim(),它将适用于整个Phase,包括前后的空格。它不适用于一只猫,两只狗。我检查了问题。他在搜索关键词,而不是关键词短语。但是无论如何:将关键字设为keyWord.trim(),它将适用于整个Phase,包括前后的空格。