👻

「replace」と「replaceAll」の違い

2023/10/20に公開
【前置き】
    メモ程度に簡単に書いて置くための物になっていますので、正確な情報をお求めの方は、
    別のサイトをお勧めいたします。

「replace」と「replaceAll」の違いと記述方法

「replace」と「replaceAll」の大きな違いは、正規表現が使えるか使えないかの違いです。
基本的には、下のように第一引数に「置換対象文字 or 文字列」を書き、第二引数に「置換文字 or 文字列」を書けば良いのです。

    <文字列>.replace(<置換対象文字 or 文字列>, <置換文字 or 文字列>);
    <文字列>.replaceAll(<置換対象文字 or 文字列>, <置換文字 or 文字列>);

基本的な書き方

  • replace

        String str = "aaaaaaaaaa";
        System.out.println("出力 >> " + str.replace("aa", "c"));
    
        出力 >> ccccc
    
  • replaceAll

        String str = "aaaaaaaaaa";
        System.out.println("出力 >> " + str.replaceAll("aa", "c"));
    
        出力 >> ccccc
    


正規表現を使った書き方

  • replace

        String str = "aaaaaaaaaa";
        System.out.println("出力 >> " + str.replace("[a-z]", "l"));
    
        出力 >> aaaaaaaaaa
    
  • replaceAll

        String str = "aaaaaaaaaa";
        System.out.println("出力 >> " + str.replaceAll("[a-z]", "l"));
    
        出力 >> llllllllll
    

最初の置換対象だけを置換する方法

前述で「replace」と「replaceAll」の違いを書きましたが、最初に見つけた置換対象だけを置換した場合この関数を使ってしまうと、文字列全体の置換対象が置換されてしまいます。

こういう時は、「replaceFirst」というメソッドを使うことによって最初に見つかった置換対象のみを置換することが可能になります。

    <文字列>.replaceFirst(<置換対象文字 or 文字列>, <置換文字 or 文字列>);

「replaceFirst」の記述方法

replaceFirstは、第一引数に「置換対象文字 or 文字列」を書き、第二引数に「置換文字 or 文字列」を書けばいいのです。
「replaceAll」と書き方は同じで、正規表現を書くこともできます。

    String str = "aaaaaaaa";
    System.out.println(str.replaceFirst("[a-z]", "c"));
    出力 >>> caaaaaaa

まとめ

replace replaceAll replaceFirst
置換部分 全文 全文 最初の置換対象のみ
正規表現 ×

簡単な比較表を作りました。
基本的に、「replace」「replaceAll」を使えば大丈夫そうです。
最初の置換対象のみを置換したい場合は、「replaceFirst」を使うと簡単にできるみたいです。

Discussion