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