Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
while(m.find()) {
System.out.print(m.start()+m.group());
}
(只写了主要代码)我觉得这个程序运行出来应该是:0123445,怎么结果却是:01234456!请大家帮我解决一下,谢谢!

解决方案 »

  1.   

    先将字符划分:字符:.a.b.3.4.e.f.
    索引:0.1.2.3.4.5.6字符间的空隙称为索引。看 \d* 字符匹配的进行方式:第一次:* 允许出现 0 次,所以匹配索引点 0,也就是 m.start() 为 0
        第一次输出 0。m.group()匹配为空字符串
    第二次:匹配零长度索引点 1
        第二次输出 1
    第三次:匹配零长度索引点 2,并且在此贪婪匹配到了数字 34,m.group() 为 34。
         第三次输出 234
    第四次:匹配零长度索引点 4。
        第四次输出 4
    第五次:匹配索引点 5。
         第五次输出 5
    第六次:凡是有贪婪 * 的量词都会匹配最后一个字符后的索引位,即匹配了索引点 6。
         第六次输出 6所以整个输出是:01234456具体的可以看看我下面的那个帖子(呵呵,那个帖子已经不知道沉到哪里去了)http://topic.csdn.net/u/20080306/17/f37a1818-3968-49b4-8f79-e5564486d63e.html里面有提供 Java Tutorial 中 Regular Expressions 一章译稿的下载和其他 Regex 的资源。
    在 5.1 节中说明了这个问题。
      

  2.   

    其实前面加了m.start()
    版主大人忽略了