サンプルコード
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 です。インデックスが0 から始まるため、m.start は出力で 6 を返します。
\d?
ゼロまたは 1 文字に一致するため、ゼロ幅一致として、文字列の最後の文字を超えて開始されます。
出力は実際には\d?
ではなく によって達成されることに注意してください\d*
。質問に一貫性を持たせるには、どちらか一方を変更する必要があります。
\d?
ゼロまたは 1 つの数字に一致し、すべての数字に一致しますが、すべての文字境界にも一致します。
少なくとも 1 つの数字を一致させてみてください。
Pattern p = Pattern.compile("\\d+");