replace()で文字を置換してみる!Java超初心者の勉強

2020-08-26

Javaのコードをみていたらreplace()を使ったコードを見つけました。
文字を置き換えていることはわかるもののよくわかっていなかったので調べてみることにしました。

replace()とは

replaceは「取り換える」、「置き換える」の意味のある英単語でJavaではreplace()は文字を置換するときに使用します。
例えば半角の「¥」マークを全角の「¥」マークに置換したい時などに使用できます。

replace()の構文

文字の変数名.replace( 対象の文字, 置換後の文字 );

他にも似たもので以下の置換メソッドがあるので合わせて覚えてしまおうと思います。

replaceFirst()

初めの対象の文字のみ置換します。

replaceFirst()の構文

文字の変数名.replaceFirst( 対象の文字, 置換後の文字 );

replaceAll()

正規表現を用いて置換する際に使用されます。

replaceAll()構文

正規表現を使用して置換する際に使用します。

文字の変数名.replaceAll(正規表現(regex), 置換後の文字);

replaceと同じように文字置換としても使えてしまったりしますが、Oracleのページにもregexと書かれているので正規表現を使う場合はreplaceAll()と覚えておきましょう。
参考:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

それでいくとreplaceFirst()もregexと書かれているので正規表現として使うのが正しいのかもしれないですね。
調べても細かく使い分けている感じではなかったのであまり深堀しないでおきます。

それではサンプルコード理解を深めていきましょう。

replace()で文字を置き換える

シンプルにreplace()を使って文字を置き換えてみます。

サンプルコード 文字列に置換したい文字列がひとつ

replace()を使ってみましょう。

String str1 = "さいうえお";
String str2 = str1.replace("さ", "あ"); // "さ"を"あ"へ置換
System.out.println(str2); // あいうえお

「さ」が「あ」に置換されました。

サンプルコード 文字列に置換したい文字列が複数

上記例文では置換対象の"さ"は1つしかでてきませんでした。複数ある場合はどうなるのかみてみましょう。

String str1 = "サーモン、うに、サーモン、いくら";
String str2 = str1.replace("サーモン", "マグロ"); // "サーモン"を"マグロ"へ置換
System.out.println(str2); // マグロ、うに、マグロ、いくら

対象の文字複数ある場合でも全て置換されていることがわかります。

replaceFirst()で最初の1つだけ置換

初めの1つを置換したらあとはもう置換しない場合replaceFirst()を使用します。

サンプルコード 最初の1つだけ文字列を置換

String str1 = "サーモン、うに、サーモン、いくら";
String str2 = str1.replaceFirst("サーモン", "マグロ"); // "サーモン"を"マグロ"へ置換
System.out.println(str2); // マグロ、うに、サーモン、いくら

はじめの「サーモン」のみ「マグロ」へ変換されました。

正規表現を使った置換(replaceAll)

正規表現一覧はこちらにまとめています。

サンプルコード 電話番号をXで表示させてみる

数値をxに変換します。

String phoneNumber = "0123-000-000";
String regex = "\\d";
String replacement = "x";
String hidePhoneNumber = phoneNumber.replaceAll(regex, replacement);
System.out.println(hidePhoneNumber); // xxxx-xxx-xxx

変数のregexとreplacementで置換していますが以下のように書くことも可能です。
String hidePhoneNumber = phoneNumber.replaceAll("\\d", "x");

ちなみにstr.replaceAll(regex, replacement)は以下のようにも書くことができます。
Pattern.compile(regex).matcher(str).replaceAll(replacement);

Patternやmatcherに慣れている人はこちらの方が書きやすいとかあるのかもしれません。

サンプルコード 改行コードを統一

せっかくなので、改行コードをreplace()を使って統一させてみましょう。

String line = "改行\r\nテスト";
String regex = "\r\n";
String replacement = "\r";
System.out.println( line.replaceAll(regex, replacement) );

サンプルコード おまけ

参考元のかっこよかったやつ備忘録として。

String str = new String("programmer-life.work");
System.out.println(str.replaceFirst("programmer(.*)", "プログラマーライフ"));

おわり

Javascriptにもreplaceメソッドがあったので覚えやすかったです。それにしても正規表現むずかしい。

参考元

Java

Posted by Nakamoto