我有以下代码。据我所知,程序应该打印0123445.而是打印01234456。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while(b=m.find()){
System.out.print(m.start() + m.group());
}
System.out.println();
}
}
我认为应该发生以下情况─ 由于搜索模式适用于\ d *,
此时,据我所知,应该这样做。但由于某种原因,该程序也返回6.
如果有人可以解释,我会非常感激。
答案 0 :(得分:2)
\ d *匹配零(!)或更多数字,这就是为什么它返回一个空字符串作为0和1匹配的原因,它匹配位置2处的34和位置4和5处的空字符串。剩下要匹配的是一个空字符串。并且这个空字符串也匹配\ d *(因为空字符串包含零位数),这就是为什么在位置6处有另一个匹配的原因。
为了对比这个尝试使用\ d +(匹配一个或多个数字)作为模式,然后看看会发生什么。