示例代码:
String test = "Z"; Pattern pt = Pattern.compile("[0-9]*"); Matcher mc = pt.matcher(test); System.out.println(mc.find()); System.out.println(mc.matches());
据我所知,它应该打印两个真实的。但是,matches()打印错误。星号表示零次或多次,为什么matches()产生假?
matches()
matches() 尝试匹配整个字符串,对我来说还可以,因为星号给我零时间。
那为什么比赛失败呢?
模式显示为[0-9]*“匹配0或0到0多次”。 如果看到数字,它将添加到匹配项中。 如果没有看到数字,它仍将0长度的字符串添加到匹配项中。这并不意味着匹配任何具有0个或多个数字的字符串(因为每个字符串具有0个或多个数字,这使这一点毫无意义),因此在您的字符串中Z,有两个零长度的匹配项:一个在字符串的开头,一个在字符串的结尾,两者都有0位数字。
[0-9]*
Z
这意味着find它将返回两次true,并且matches将返回false,因为整个字符串都不匹配(请记住有wo匹配!)。
find
matches