String の replaceAll で IllegalArgumentException

"\"バックスラッシュへの変換や、"$" 文字を含む replacement への変換を
String の replaceAll で実行すると、
IllegalArgumentException: Illegal group reference
になるので、注意!
しかもこの例外は、replaceAll(String regex, String replacement) の
regex → replacement において、 "\" や "$" 文字へ実際に変換が
実行される時のみに発生する例外なので、とても見つけにくい例外だ。

うっかり、こういう replaceAll の使い方をしてしまう。。

そういう場合は、java.util.regex.Matcher の quoteReplacement を使う。

string.replaceAll("_", Matcher.quoteReplacement("$_"));