.net column

.NET開発者のためのブログメディア

Javaで文字列を置換には?おすすめの方法3つを紹介!

2020年07月01日

SE
Javaで文字列を置換するには、どうすればいいのですか?
PM
状況に応じてメソッドを使い分けることで、文字列を置換することが出来ます。

文字列の置換とは?

まず、文字列の置換とは何かを確認しましょう。文字列の置換とは、文字列の中の特定の文字を、他の文字に置き換えることです。例えば、「あいうえお」という文字列の「あ」を「か」に置き換えれば「かいうえお」になります。

ここまでの説明では「それがなんの役に立つのか?」と疑問に思うかもしれませんが、英文の空白を「,」に置き換えることで単語ごとに区切ってある文字列を作る時や、文章の改行を空白に置き換えることで改行を省く時など、何かと必要になる処理なのです。

文字列の置換方法1:replace()を使う

Javaの文字列の置換方法として、最初に紹介するのがStringクラスのreplace()です。

このメソッドは、引数を二つとり、第一引数に指定された文字列を、第二引数に指定された文字列に置換した文字列を返す処理を行います。

第一引数に指定された文字列が複数回登場する場合は、登場する文字列が全て第二引数に置換されることに注意が必要です。

以下でreplace()に向いている置換と、向いていない置換についてサンプルコードを使いながら、説明していきます。

public class SampleProgram {
public static void main(String[] args) {
String beforeReplace = “”All,is,well,that,ends,well””;
String afterReplace = beforeReplace.replace(“”,””, “” “”);
System.out.println(afterReplace); // 「All is well that ends well」と表示される
}
}

replace()に向いている置換

このサンプルプログラムでは「All,is,well,that,ends,well」という文字列の「,」をスペースに置換した文字列を表示しています。

すべての「,」がスペースに置換され、自然な英文に置換できます。このように、Javaで文字列に含まれる特定の部分文字列を全て置換したい場合は、replace()を使うと良いでしょう。

public class SampleProgram {
public static void main(String[] args) {
String beforeReplace = “”にわにはにわにわとりがいる””;
String afterReplace = beforeReplace.replace(“”にわ””, “”庭””);
System.out.println(afterReplace); // 「庭には庭庭とりがいる」と表示される
}
}

replace()に向いていない置換

一方、このサンプルプログラムでは、「にわにはにわにわとりがいる」という文字列の、「にわ」を「庭」に置換した文字列を表示しています。

このプログラムを記述したプログラマは、「にわ」だけを置換したかったことが予想できますが、すべての「にわ」が置換されてしまい、おかしな文章となってしまいます。

このように、意図しない文字列を置換してしまう恐れがある場合はreplace()は向いていません。

文字列の置換方法2:replaceAll()を使う

次にJavaの文字列の置換方法として紹介するのは、StringクラスのreplaceAll()です。

このメソッドは引数を二つとり、第一引数に指定された正規表現に一致する文字列を、第二引数に指定された文字列で置換した文字列を返す処理を行います。最初に紹介したreplace()とは異なり、第一引数が正規表現であることに注意してください。

また、replaceAll()に向いている置換についてサンプルコードを使いながら説明するので、参考にしてください。

public class SampleProgram {
public static void main(String[] args) {
String beforeReplace = “”にわにはにわにわとりがいる””;
String afterReplace = beforeReplace.replaceAll(“”\\Aにわ””, “”庭””);
System.out.println(afterReplace); // 「庭にはにわにわとりがいる」と表示される
}
}

replaceAll()に向いている置換

このサンプルプログラムでは、「にわにはにわにわとりがいる」という文字列の、「\Aにわ」という正規表現に一致する文字列を「庭」に置換した文字列を表示しています。

今度は「\A」という入力の先頭を表す正規表現を使っているので、先頭の「にわ」だけを「庭」に置換することができます。

このように、Javaで正規表現に一致する文字列を置換したい場合には、replaceAll()を使うと良いでしょう。

文字列の置換方法3:replaceFirst()を使う

最後に紹介するのは、StringクラスのreplaceFirst()です。このメソッドは引数を二つとり、第一引数に指定された正規表現に一致する最初の文字列を、第二引数で指定された文字列に置換をし、文字列を返す処理を行います。

replaceAll()とは異なり、一致した最初の文字列だけを置換するので想定外の文字列が置換されることが少なく、バグを生み出しにくいと言えるでしょう。

public class SampleProgram {
public static void main(String[] args) {
String beforeReplace = “”にわにはにわにわとりがいる””;
String afterReplace = beforeReplace
.replaceFirst(“”にわ””, “”庭””)
.replaceFirst(“”にわ””, “”二羽””)
.replaceFirst(“”にわとり””, “”鶏””);
System.out.println(afterReplace); // 「庭には二羽鶏がいる」と表示される
}
}

replaceFirst()に向いている置換

このサンプルプログラムは、「にわにはにわにわとりがいる」という文字列に対して、文字列の置換を3回行った文字列を表示します。1度目に「にわ」を「庭」に、2度目に「にわ」を「二羽」に、3度目は「にわとり」を「鶏」に置換しています。

2度目の置換の時には、1度目の置換が終わった文字列(「庭にはにわにわとりがいる」)に対して、最初に登場する「にわ」を置換するので想定通りに置換されます。

このようにreplaceFirst()を使うことで、漢字を使用した自然な文章に置換することができました。

public class SampleProgram {
public static void main(String[] args) {
String beforeReplace = “”All,is,well,that,ends,well””;
String afterReplace = beforeReplace.replaceFirst(“”,””, “” “”);
System.out.println(afterReplace); // 「All is,well,that,ends,well」と表示される
}
}

replaceFirst()に向いていない置換

このサンプルプログラムでは、「All,is,well,that,ends,well」という文字列の最初の「,」をスペースに置換した文字列を表示します。

このサンプルプログラムの結果からわかるように、Javaで文字列に含まれる全ての部分を文字列へ置換するような処理に、replaceFirst()は向いていないでしょう。

SE
置換したい文字列に合わせて使い分けるのがコツですね。
PM
Javaで文字列を置換する時は、3つの中から適切なメソッドを使いましょう。

Javaの置換方法を使ってみよう

ここまで、Javaの文字列の置換の方法を3つ紹介しました。replace()の第一引数は、正規表現ではなく、一致した文字列を全て置換します。

replaceAll()とreplaceFirst()の第一引数は正規表現で、一致した部分を全て置換する、もしくは最初だけを置換するかという点で異なります。

同じJava言語でも、置換するものによって思っていたのと違うように置換されることもあります。Javaで文字列の置換を行うときは、この違いを理解してどのメソッドを使うのがふさわしいのかを判断しましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)