检查字符串是否包含特定单词

时间:2013-06-16 15:21:35

标签: java android

那么如何检查字符串中是否包含特定单词?

所以这是我的代码:

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!");  
            }
        }
    });

我收到了错误。

10 个答案:

答案 0 :(得分:40)

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

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()

答案 1 :(得分:9)

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

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

由于你没有发布错误,我猜d是null或者你得到的“不能引用在不同方法中定义的内部类中的非final变量”错误。

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

答案 2 :(得分: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.*

答案 3 :(得分:1)

使用包含

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");

}

答案 4 :(得分: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"); 
} 

答案 5 :(得分: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) == ' '));

        if (valid_left && valid_right) {
            return true;
        }
    }
    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 确保事先过滤掉所有逗号或句号。

答案 6 :(得分:0)

if (someString.indexOf("Hey")>=0) 
     doSomething();

答案 7 :(得分:0)

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

if ( d.contains("hello")) {
            System.out.println("I found the keyword");
}

答案 8 :(得分:0)

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

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

解决方案2:-您可能还想从一个句子中搜索一个独立的单词,然后解决方案1 ​​如果搜索到一个单词也将返回true存在任何其他词。例如,如果您要从包含此词** Beneficent **的句子中搜索 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;}

现在在 Solution-2 中,由于不存在独立的 cent 单词,它将返回 false

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

答案 9 :(得分:0)

另一个答案(到目前为止)似乎是在检查子串而不是单词。主要区别。

借助this article,我创建了这个简单的方法:

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