在Java中
String term = "search engines"
String subterm_1 = "engine"
String subterm_2 = "engines"
如果我term.contains(subterm_1)
,则返回true
。我不希望这样。我希望subterm
与term
因此term.contains(subterm_1)
之类的内容会返回false
而term.contains(subterm_2)
会返回true
答案 0 :(得分:32)
\ b匹配单词边界,其中单词字符为[a-zA-Z0-9 _]。
这应该适合您,您可以轻松地重复使用此方法。
public class testMatcher {
public static void main(String[] args){
String source1="search engines";
String source2="search engine";
String subterm_1 = "engines";
String subterm_2 = "engine";
System.out.println(isContain(source1,subterm_1));
System.out.println(isContain(source2,subterm_1));
System.out.println(isContain(source1,subterm_2));
System.out.println(isContain(source2,subterm_2));
}
private static boolean isContain(String source, String subItem){
String pattern = "\\b"+subItem+"\\b";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(source);
return m.find();
}
}
输出:
true
false
false
true
答案 1 :(得分:3)
如果单词总是用空格分隔,这是一种方法:
String string = "search engines";
String[] parts = string.split(" ");
for(int i = 0; i < parts.length; i++) {
if(parts[i].equals("engine")) {
//do whatever you want
}
答案 2 :(得分:2)
我建议使用单词边界。如果你编译像\ bengines \ b这样的模式,那么你的正则表达式只匹配完整的单词。
以下是单词边界的解释,以及一些示例。 http://www.regular-expressions.info/wordboundaries.html
此外,这里是模式的java API,它包含单词边界 http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
以下是使用上述要求的示例
Pattern p = Pattern.compile("\\bengines\\b");
Matcher m = p.matcher("search engines");
System.out.println("matches: " + m.find());
p = Pattern.compile("\\bengine\\b");
m = p.matcher("search engines");
System.out.println("matches: " + m.find());
这是输出:
matches: true
matches: false
答案 3 :(得分:1)
使用indexOf,然后检查poistion上的char是否
index + length of string plus +1 == ` ` or EOS
或者我确信也有正则表达式。
答案 4 :(得分:1)
我希望子项与术语
中的一个词完全匹配
然后你不能使用contains()
。您可以将术语拆分为单词并检查相等性(有或没有区分大小写)。
boolean hasTerm = false;
for (String word : term.split("\\s+") {
if (word.equals("engine")) {
hasTerm = true;
break;
}
}
答案 5 :(得分:1)
由于contains方法验证字符串中是否存在该char数组,因此它将返回true,您必须使用Regex进行此验证。
如果单词被空格分开,则更容易,你可以使用\ s正则表达式来获取它。
这是一个很好的教程:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html
答案 6 :(得分:1)
一种方法可能是用空格分割字符串,将其转换为列表,然后使用contains
方法检查完全匹配,如下所示:
String[] results = term.split("\\s+");
Boolean matchFound = Arrays.asList(results).contains(subterm_1);