JavaのStringを扱う上で、指定した文字列を一括で置換することが必要となる場合があります。
「指定した文字列を一括で置換する方法が知りたい」
「さまざまな方法で文字列を置換する方法が知りたい」
「replaceAllは正規表現が使えるの?」
「replaceとreplaceAllのパフォーマンスが知りたい」
今回は、そんな悩みを解決するために、指定した文字列を一括で置換する方法を、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
replaceAllとは
replaceAllメソッドは、検索対象の文字列が指定した文字列と一致する場合、該当した文字列を全て置換するためのメソッドです。
String.replaceAll(String regex, String replacement)
regex:検索する文字列または正規表現
replacement:置換する文字列
replaceAllの使用方法
以下にreplaceAllメソッドを使用した文字列を一括置換する方法を記述します。
public class Main { public static void main(String[] args) throws Exception { //replaceAllを使用する String str = "apple,orange,apple,orange"; str = str.replaceAll("apple", "melon"); System.out.println("str : " + str); } }
実行結果
str : melon,orange,melon,orange
サンプルでは、文字列に”apple,orange,apple,orange”を設定し、replaceAllメソッドを使用して引数に置換対象文字列と、置換文字列を指定しています。
実行結果を確認すると、文字列の”apple”の箇所が”melon”に置き換わっていることがわかります。
文字列のさまざまな置換方法
文字列を置換する方法は、replaceAllメソッド以外にもreplace、replaceFirstなどのメソッドがあります。
文字列のさまざまな置換方法については、以下の記事で詳しく解説しています。
正規表現を使用した一括置換
replaceAllメソッドは置換対象の文字列に、正規表現を指定することができます。
以下にreplaceAllメソッドで、正規表現を指定した一括置換の方法を記述します。
public class Main { public static void main(String[] args) throws Exception { //正規表現を使った置換 String str = "abc111def222ghi333"; str = str.replaceAll("[a-z]+", "0"); System.out.println("str : " + str); } }
実行結果
str : 011102220333
サンプルでは、文字列”abc111def222ghi333”を設定し、replaceAllメソッドで置換対象の文字列に、正規表現で”[a-z]+”を指定しています。
“[a-z]+”は対象の文字列にaからzまでの文字が含まれているか判断し、含まれていた場合は指定した置換文字列で一括置換しています。
正規表現のさまざまな使い方
正規表現は、さまざまなメソッドで使用することが可能で、指定方法もさまざまです。
正規表現の詳しい使い方については、以下の記事で詳しく解説しています!
速度面
文字列を置換するメソッドとしてreplaceメソッドとreplaceAllメソッドがありますが、どちらがパフォーマンスが優れているのでしょうか?
replaceメソッドとreplaceAllメソッドを、ループの中で1000回文字列を置換したときの速度を、ナノ秒単位で計測してみました。
public class Main { public static void main(String[] args) throws Exception { /* replaceとreplaceAllの速度判定 */ String str = "apple,orange,melon,banana"; //1. replace String strrp; long start1 = System.nanoTime(); for(int val=0; val<1000; val++) { strrp = str.replace("orange", "apple"); } long end1 = System.nanoTime(); System.out.println("replace : " + (end1 - start1) / 1000000f + "ms"); //2. replaceAll String strall; long start2 = System.nanoTime(); for(int val=0; val<1000; val++) { strall = str.replaceAll("orange", "apple"); } long end2 = System.nanoTime(); System.out.println("replaceAll : " + (end2 - start2) / 1000000f + "ms"); } }
実行結果(1回目)
replace : 26.626507ms replaceAll : 31.7075ms
実行結果(2回目)
replace : 43.12543ms replaceAll : 23.881248ms
実行結果(3回目)
replace : 37.985527ms replaceAll : 22.223965ms
実行結果によって結果が異なり、replaceとreplaceAllはどちらが早いか、一概には言えない結果となりました。
Stringについてもっと詳しく知りたい方へ
Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、replaceAllメソッドを使用した文字列の一括置換の方法や、正規表現の指定方法、処理パフォーマンスの計測などを行いました。
String型の値を一括置換する処理は、さまざまな場面で使用することがあると思います。
もし、replaceAllメソッドの使用方法を忘れてしまったら、この記事を思い出してくださいね!