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

JavaのStringを扱う上で、指定した文字列を一括で置換することが必要となる場合があります。

「指定した文字列を一括で置換する方法が知りたい」
「さまざまな方法で文字列を置換する方法が知りたい」
「replaceAllは正規表現が使えるの?」
「replaceとreplaceAllのパフォーマンスが知りたい」

今回は、そんな悩みを解決するために、指定した文字列を一括で置換する方法を、わかりやすく解説します!

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で正規表現】文字列をチェックするパターンの書き方とサンプル
更新日 : 2019年4月23日

速度面

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

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。