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 です。インデックスが0 から始まるため、m.start は出力で 6 を返します。

4

2 に答える 2

3

\d?ゼロまたは 1 文字に一致するため、ゼロ幅一致として、文字列の最後の文字を超えて開始されます。

出力は実際には\d?ではなく によって達成されることに注意してください\d*。質問に一貫性を持たせるには、どちらか一方を変更する必要があります。

于 2012-10-23T19:39:37.223 に答える
1

\d?ゼロまたは 1 つの数字に一致し、すべての数字に一致しますが、すべての文字境界にも一致します。

少なくとも 1 つの数字を一致させてみてください。

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