【Java入門】Stringの一括置換(replaceAll)

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メソッド以外にもreplacereplaceFirstなどのメソッドがあります。

文字列のさまざまな置換方法については、以下の記事で詳しく解説しています。

正規表現を使用した一括置換

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までの文字が含まれているか判断し、含まれていた場合は指定した置換文字列で一括置換しています。

正規表現のさまざまな使い方

正規表現は、さまざまなメソッドで使用することが可能で、指定方法もさまざまです。

正規表現の詳しい使い方については、以下の記事で詳しく解説しています!

【Javaで正規表現】文字列をチェックするパターンの書き方とサンプル
更新日 : 2021年9月8日

速度面

文字列を置換するメソッドとして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メソッドの使用方法を忘れてしまったら、この記事を思い出してくださいね!

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

侍テック編集部

株式会社SAMURAI

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close