JavaのString.replaceとString.replaceAllの違い

2014年01月23日 ごろに書いた記事です(消そうと思いましたが懐かしいので残しておく)

replaceでは引数に指定した文字をそのまま置き換えるが、 replaceAllでは引数に指定した文字を正規表現と見なして置き換える。

例えば、以下のようなコードでは、

String str = "abc.def.";
System.out.println("Result: " + str.replace(".", "1"));
System.out.println("Result: " + str.replaceAll(".", "1"));

出力は

Result: abc1def1
Result: 11111111

となる。正規表現で"."は任意の文字にマッチする意味を持つので、 正規表現を使うreplaceAllではすべての文字が変換されている。

replace,replaceAllを使う時はこの点に注意しておこう。

ちなみに、replaceAllを使いたい時に"."にマッチさせたい場合には"\."を使えばよい