你能否告诉我为什么这个表达不会返回TRUE
?
public class test {
public static void main(String[] args) throws IOException{
String str = "The dog plays";
boolean t = str.matches("\\bdog\\b");
System.out.println(t);
}
}
答案 0 :(得分:2)
matches
方法将始终尝试匹配整个字符串。它不是匹配特定字符串的合适方法。所以改变你的正则表达式,
".*\\bdog\\b.*"
按顺序使匹配方法返回true。
String str = "dog plays";
System.out.println(str.matches(".*\\bdog\\b.*"));
输出:
true
\b
称为单词边界,它在单词字符和非单词字符之间匹配。请注意,上面的正则表达式也匹配字符串foo:dog:bar
。如果你想让狗成为一个单独的词,我建议你使用这个正则表达式。
".*(?<!\\S)dog(?!\\S).*"
示例:强>
System.out.println("dog plays".matches(".*(?<!\\S)dog(?!\\S).*"));
System.out.println("foo:dog:bar".matches(".*(?<!\\S)dog(?!\\S).*"));
输出:
true
false
答案 1 :(得分:0)
这将返回false,因为它尝试匹配整个字符串 有关详细信息,请参阅:Boundary Matchers
所以要正确使用".*\\bdog\\b.*"
,正如阿维纳什正确地说的那样。
答案 2 :(得分:0)
对于Matcher
类:
matches()
返回true
find()
返回true。
所以这很可能就是您想要的:
public class Test {
public static void main(String[] args) {
String str = "The dog plays";
boolean t = str.find("\\bdog\\b");
System.out.println(t);
}
}