Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java TIPS
  4. Javaで文字列を置換には?おすすめの方法3つを紹介!

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

  • Java TIPS
公開日時:
Javaで文字列を置換には?おすすめの方法3つを紹介!
この記事でわかること

    システム
    エンジニア
    Javaで文字列を置換するには、どうすればいいのですか?
    プロジェクト
    マネージャー
    状況に応じてメソッドを使い分けることで、文字列を置換することが出来ます。

    文字列の置換とは?

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

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

    文字列の置換方法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()は向いていないでしょう。

    システム
    エンジニア
    置換したい文字列に合わせて使い分けるのがコツですね。
    プロジェクト
    マネージャー
    Javaで文字列を置換する時は、3つの中から適切なメソッドを使いましょう。

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

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

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

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

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job