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

Whi*_*One 25 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!");  
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误.

fth*_*ins 44

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

  • @JavaTec你需要使用正则表达式来正确搜索单词.类似于m0skit0的答案(如果你反复使用相同的表达式,看看使用编译表达式的答案),你会想要这样做:`if(d.matches("\\ bkeyword \\ b")){/*成功*/}`.`\ b`(用于转义反斜杠的字符串中的`\\ b`)匹配"单词边界",即单词的边缘.使用空格的优点是它可以恰当地匹配"句子与关键字"之类的内容.(完全停止而不是空格)或甚至"关键字"(开头或结尾没有空格). (3认同)

Ken*_*olf 9

.contains() 是完全有效的,是一个很好的检查方式.

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

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

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


m0s*_*it0 8

您可以使用正则表达式:

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

.* - > 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!");  
}
Run Code Online (Sandbox Code Playgroud)

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


ban*_*ing 5

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

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

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();
}
Run Code Online (Sandbox Code Playgroud)