27

So how do you check if a string has a particular word in it?

So this is my code:

a.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if(d.contains("Hey")){
                c.setText("OUTPUT: SUCCESS!"); 
            }else{
                c.setText("OUTPUT: FAIL!");  
            }
        }
    });

I'm getting an error.

4

10 回答 10

58

没有他们说的那么复杂,检查一下你不会后悔的。

String sentence = "Check this answer and you can find the keyword with this code";
String search  = "keyword";

if ( sentence.toLowerCase().indexOf(search.toLowerCase()) != -1 ) {

   System.out.println("I found the keyword");

} else {

   System.out.println("not found");

}

您可以根据toLowerCase()需要更改。

于 2014-07-13T01:04:02.573 回答
11

.contains()是完全有效的,并且是检查的好方法。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#contains(java.lang.CharSequence)

由于您没有发布错误,我猜d要么为 null,要么您收到“无法引用以不同方法定义的内部类中的非最终变量”错误。

为确保它不为空,首先在 if 语句中检查是否为空。如果是另一个错误,请确保d声明为final或者是您的类的成员变量。同上c

于 2013-06-16T15:29:58.207 回答
8

您可以使用正则表达式:

if (d.matches(".*Hey.*")) {
    c.setText("OUTPUT: SUCCESS!");
} else {
    c.setText("OUTPUT: FAIL!");  
}

.*-> 0 个或多个任意字符

Hey-> 你想要的字符串

如果您要经常检查,最好在Pattern对象中编译正则表达式并重用Pattern实例来进行检查。

private static final Pattern HEYPATTERN = Pattern.compile(".*Hey.*");
[...]
if (HEYPATTERN.matcher(d).matches()) {
    c.setText("OUTPUT: SUCCESS!");
} else {
    c.setText("OUTPUT: FAIL!");  
}

请注意"Heyburg",例如,这也将匹配,因为您没有指定要"Hey"作为独立词进行搜索。如果您只想匹配Hey一个单词,则需要将正则表达式更改为 .*\\bHey\\b.*

于 2013-06-16T15:24:09.440 回答
3

使用包含

String sentence = "Check this answer and you can find the keyword with this code";
String search = "keyword";

if (sentence.toLowerCase().contains(search.toLowerCase())) {

  System.out.println("I found the keyword..!");

} else {

  System.out.println("not found..!");

}
于 2018-01-24T07:09:03.773 回答
2

另一个答案(迄今为止)似乎检查子字符串而不是单词。主要区别。

在本文的帮助下,我创建了这个简单的方法:

static boolean containsWord(String mainString, String word) {

    Pattern pattern = Pattern.compile("\\b" + word + "\\b", Pattern.CASE_INSENSITIVE); // "\\b" represents any word boundary.
    Matcher matcher = pattern.matcher(mainString);
    return matcher.find();
}
于 2020-10-08T23:05:22.870 回答
1

解决方案1: - 如果要从句子中搜索字符组合或独立单词。

String sentence = "In the Name of Allah, the Most Beneficent, the Most Merciful."
if (sentence.matches(".*Beneficent.*")) {return true;}
else{return false;}

解决方案-2: -还有另一种可能性,您想从一个句子中搜索一个独立的单词,那么如果您搜索的单词存在于任何其他单词中,Solution-1也将返回 true。例如,如果您要从包含这个词 ** Beneficient** 的句子中搜索cent ,那么Solution-1将返回 true。为此,请记住在正则表达式中添加空格。

String sentence = "In the Name of Allah, the Most Beneficent, the Most Merciful."
if (sentence.matches(".* cent .*")) {return true;}
else{return false;}

现在在解决方案 2中它将返回false,因为不存在独立的词。

附加:您可以根据您的要求在第二个解决方案的任一侧添加或删除空间。

于 2019-12-24T13:15:39.007 回答
1
   String sentence = "Check this answer and you can find the keyword with this code";
    String search = "keyword";

比较给定字符串中的字符串行

if ((sentence.toLowerCase().trim()).equals(search.toLowerCase().trim())) {
System.out.println("not found");
}
else {  
    System.out.println("I found the keyword"); 
} 
于 2019-02-08T07:14:10.433 回答
1

上面已经正确指出,在句子中查找给定单词与查找字符序列不同,如果您不想弄乱正则表达式,可以按如下方式完成。

boolean checkWordExistence(String word, String sentence) {
    if (sentence.contains(word)) {
        int start = sentence.indexOf(word);
        int end = start + word.length();

        boolean valid_left = ((start == 0) || (sentence.charAt(start - 1) == ' '));
        boolean valid_right = ((end == sentence.length()) || (sentence.charAt(end) == ' '));

        return valid_left && valid_right;
    }
    return false;
}

输出

checkWordExistence("the", "the earth is our planet"); true
checkWordExistence("ear", "the earth is our planet"); false
checkWordExistence("earth", "the earth is our planet"); true

PS 请确保您事先已过滤掉任何逗号或句号。

于 2019-10-29T13:41:09.683 回答
0
if (someString.indexOf("Hey")>=0) 
     doSomething();
于 2013-06-16T15:40:34.510 回答
0

也许这篇文章很旧,但我遇到了它并使用了“错误”的用法。查找关键字的最佳方法是使用.contains,例如:

if ( d.contains("hello")) {
            System.out.println("I found the keyword");
}
于 2019-08-02T18:02:41.840 回答