PatternとMatcherを使い、マッチングした内容を加味して置換を行いたい

良くやろうと思いついて書くけど、書くたびにドキュメント見に行くのがつらかったので記事にしておこう。

単純な置換であれば、replaceAllとかで間に合うのですが、
なんちゃってテンプレートエンジンをPatternで作ろうとか思うと、マッチングした内容を加味する必要があります。

例えば、以下のテンプレート文があったとします。

hoge is "${hoge}"
hoge is "${fuga}"


与えるMap値として以下を与えます。

map.put("hoge", "ほげ");
map.put("fuga", "ふが");


実行結果として以下を期待するとします。

hoge is "ほげ"
hoge is "ふが"


こういった場合、replaceAllとかでは出来ません。
Matcher#find と Matcher#appendReplacement と Matcher#appendTail を使ってガリガリ書く必要があります。

続きを読む