3

示例代码

Pattern p = Pattern.compile("\\d?");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while (m.find())
{
    System.out.print(m.start());// + m.group());
}

答案:012456

但是字符串总长度是 6。所以 m.start 如何在输出中给出 6,因为索引
从 0 开始。

4

2 回答 2

3

\d?匹配零个或一个字符,因此它也从字符串的最后一个字符开始,作为零宽度匹配。

请注意,您的输出实际上不是由 获得的\d?,而是由获得的\d*。您应该更改其中一个或另一个以使问题自洽。

于 2012-10-23T19:39:37.223 回答
1

\d?匹配零或一个数字,它匹配每个数字,但也匹配每个字符边界。

尝试匹配至少一位数字:

Pattern p = Pattern.compile("\\d+");
于 2012-10-23T19:43:09.753 回答