を使用するコードを書いていてMatcher#replaceAll
、次の結果が非常に紛らわしいことがわかりました。
Pattern.compile("(.*)").matcher("sample").replaceAll("$1abc");
今、私は出力が期待しますsampleabc
が、Javaは私に投げますsampleabcabc
.
誰にも理由はありますか?
確かに、パターン ( ^(.*)$
) を固定すると、問題はなくなります。replaceAll
それでも、なぜそんな二重交換をするのかわかりません。
そして、怪我に侮辱を加えるために、次のコード:
Pattern.compile("(.*)").matcher("sample").replaceFirst("$1abc")
期待どおりに動作し、ちょうど を返しますsampleabc
。