代码如下:String a = "aaaaaab";
String patternStrs = "a*b";
Pattern pattern = Pattern.compile(patternStrs);
Matcher matcher = pattern.matcher(a);
while (matcher.find()) {
}
System.out.println(matcher.find());
boolean b = Pattern.matches("a*b","aaaaaab");
System.out.println(b);同样的表达式用什么matcher.find()返回的是false,而Pattern.matches返回的是true,麻烦各位高手帮解释下,谢谢。

解决方案 »

  1.   

    你都while 完了,下一个find自然是false了我理解的find,部分匹配,matches完全匹配find("^abc$") == matches("abc") == matches("^abc$")
      

  2.   

    while (matcher.find()) {
    }
    System.out.println(matcher.find());
    你这样肯定是输出false啊
    不是正则没有匹配,而是你的matcher已经找出所有的匹配结果了,你在让他find,它当然就找不到了
    while (matcher.find()) {}
    matcher.reset();//重置matcher
    System.out.println(matcher.find());
    这样就相当于你没有写那个while循环了,打印的是true
      

  3.   

    matches
    public static boolean matches(String regex,
                                  CharSequence input)编译给定正则表达式并尝试将给定输入与其匹配。 
    调用此便捷方法的形式 Pattern.matches(regex, input);与表达式 
    Pattern.compile(regex).matcher(input).matches() 的行为完全相同。 
    如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。
    参数:
    regex - 要编译的表达式
    input - 要匹配的字符序列 
    抛出: 
    PatternSyntaxException - 如果表达式的语法无效find
    public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。 
    此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。 如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
    返回:
    当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。
    这个翻一下API就有解析了。。而且你可以自己多试