那么如何检查字符串中是否包含特定单词?
所以这是我的代码:
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!");
}
}
});
我收到了错误。
答案 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();
}