概要
Javaで文字列の置換を行うときは、replace
やreplaceAll
を使うと思います。 replace対象が一単語であったり、正規表現でカバーできるなら問題ないのですが、これが複数の単語の場合どうでしょうか。例えば以下のようなケース。
文字列中の「"りんご", "みかん", "ぶどう"」を全て「"apple", "orange", "grape"」に置き換える
例えば、置き換えの対象組みをMapなどで持っておいて、for文でreplaceAllを繰り返し行えば良いと言えば良いのですが、もう少し簡潔に実装するやり方がないかと思い少し調べてみました。
対応方法
こちらのStackoverflowの記事にいくつか対応案がのせられています。個人的には、commons-langのライブラリのStringUtils.replaceEach
を使う方法が良い感じがします。
replaceEach
はcommons-langのドキュメントにある通り、置換対象と置換後の文字列を配列で設定することで、一回のメソッド実行で複数文字列の置換を実現しています。
実装サンプル
上記の概要に記載している果物の例を、StringUtils.replaceEach
を使って実装した例です。実行結果はapple|orange|grape|apple|orange|grape
になります。
public class ReplaceEachSample {
public static void main(String[] args) {
String testWord = "りんご|みかん|ぶどう|りんご|みかん|ぶどう";
String result = StringUtils.replaceEach(
testWord,
new String[]{"りんご", "みかん", "ぶどう"},
new String[]{"apple", "orange", "grape"}
);
System.out.println(result);
}
}