Javaには文字列を置換する方法がいくつかあります。
この記事では、
- 文字列を置換する方法が知りたい
- メソッドによってどんな違いがあるのか知りたい
- どのメソッドを使って置換したらいいか知りたい
というように、基本的な内容から応用的な内容に関しても解説していきます。今回はそんな文字列を置換する方法ついて、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
文字列を置換する方法
replaceとは
replaceメソッドは第一引数で指定した文字列を第二引数で指定した文字列に置換するという機能を持っています。replaceメソッドは以下のように記述します。
書き方:
対象の文字列.replace(置換される文字列, 置換文字列)
対象の文字列から置換される文字列を検索し、マッチした文字列を置換文字列に置き換えます。そして、置換後の文字列を戻り値として返します。
replaceの使い方
使い方を見てみましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { String fruits = "apple, orange, melon, apple"; System.out.println(fruits.replace("apple", "banana")); } }
実行結果:
banana, orange, melon, banana
このコードでは変数fruitsをフルーツ名をカンマで区切った文字列で初期化しています。そしてその文字列の中から「apple」を探し出し「banana」に書き換えるというプログラムになります。
変数fruitsの文字列ににはappleが二つ出てきますが、replaceメソッドは条件に合致する文字列をすべて置き換えてくれます。
replaceで空白を削除する方法
replaceメソッドを使用して、空白を削除することができます。
サンプルプログラム:
public class Main { public static void main(String[] args) { String fruits = " sa mu ra i "; System.out.println(fruits.replace(" ", "")); } }
実行結果:
samurai
置換される文字列に空白、置換文字列に空文字を指定することで、元の文字列の空白が削除できます。
空白を削除する方法については、こちらの記事で詳しく解説しています!
文字列を正規表現で置換する方法
replaceAllとは
replaceAllメソッドは該当する文字列を全て書き換えるという機能を持っています。replaceAllメソッドは以下のように記述します。
書き方:
対象の文字列.replaceAll(置換される文字列, 置換文字列)
対象の文字列から置換される文字列を検索し、マッチした全ての文字列を置換文字列に置き換えます。そして、置換後の文字列を戻り値として返します。ここまでの説明だと、先ほどのreplaceメソッド同じではないかと思った方もいるでしょう。
しかし、replaceメソッドとreplaceAllメソッドには大きな違いがあります。それは、replaceAllメソッドは第一引数で正規表現を使うことができる点です。
正規表現については、こちらの記事を参考にしてください!
replaceAllの使い方
使い方を見てみましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { String fruits = "apple, orange, melon, apple"; System.out.println(fruits.replaceAll("apple", "banana")); } }
実行結果:
banana, orange, melon, banana
このサンプルでは正規表現を使用していないので、replaceメソッドのサンプルと同じ動きになります。
replaceとreplaceAllの違い
replaceAllメソッドの第一引数で正規表現を使ったコードを見てみましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { String fruits = "apple, orange, melon, apple"; System.out.println(fruits.replaceAll("[a-z]", "banana")); } }
実行結果:
bananabananabananabananabanana, bananabananabananabananabananabanana, bananabananabananabananabanana, bananabananabananabananabanana
実行結果が大変なことになりました。
[a-z]は、aからzのアルファベットのどれか1文字を意味します。このコードの場合、アルファベット1文字を発見するたびにbananaに書き換えるという処理を行っています。そのためカンマ以外の文字数分bananaに置き換わっているのです。
最初の文字列を置換する方法
replaceFirstとは
これまでのreplaceメソッド、replaceAllメソッドは、合致する条件の文字列を全て置き換えるといったものでしたが、このreplaceFirstメソッドは一番最初に発見した(該当する)文字列だけを書き換えるという機能を持っています。
replaceFirstメソッドは以下のように記述します。
書き方:
対象の文字列.replaceFirst(置換される文字列, 置換文字列)
対象の文字列から置換される文字列を検索し、最初にマッチした文字列のみ置換文字列に置き換えます。そして、置換後の文字列を戻り値として返します。
replaceFirstの使い方
使い方を見てみましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { String fruits = "apple, orange, melon, apple"; System.out.println(fruits.replaceFirst("apple", "banana")); } }
実行結果:
banana, orange, melon, apple
この実行結果を見て分かる通り、一番最初のappleだけがbananaに置き換わりましたね。それ以降は対象となる文字列が何回が出てきても置き換わることがありません。
replaceAllと同様、replaceFirstも第一引数に正規表現を使うことができます。正規表現を使うことができないのはreplaceだけなので注意してください。
まとめ
正規表現を使わない文字列の置換にはreplaceを使い、正規表現を使う文字列の置換はreplaceAll、もしくはreplaceFistを使いましょう。
もしreplace系のメソッドの違いを忘れてしまった場合はこの記事を思い出してください!