Javaで文字列を置換するには、StringクラスのreplaceFirstもしくはreplaceAllを使うのがいい。
このページではreplaceFirts、replaceAllそれぞれの使い方とサンプルプログラムをご紹介する。
目次
最初に該当した文字列を置換する(replaceFirst)
replaceFirstメソッド
replaceFirst( String regrex , String replacement )
regrex:置換前の文字列 replacement:置換後の文字列
| 
 戻り値の型  | 
 String  | 
| 
 内容  | 
 指定された正規表現に一致する、この文字列の最初の部分文字列に対し、指定された置換を実行する。  | 
replaceFirst(String regrex, String replacement)は、文字列にregrexと一致するものがあった場合、最初に一致したもののみreplacementに置き換えて値を返すメソッドだ。
サンプルコード
サンプルコードは簡単だが、次の通りだ。
| 
					 1 2 3 4 5 6 7 8 9  | 
						public class StringSample12 {     public static void main(String[] args) {         String message ;          message = "ABCABCABCABCABC";//[1]         String result = message.replaceFirst("A","YYY");//[2]         System.out.println("もとの文字列:" + message);         System.out.println("置換した文字列:" + result);//[3]       } }   | 
					
実行結果
| 
					 1 2  | 
						もとの文字列:ABCABCABCABCABC 置換した文字列:YYYBCABCABCABCABC  | 
					
サンプルコードの説明
- [1] String型の変数messageを初期化。
 - [2] replaceFirstメソッドを使用してmessageに代入されている"ABCABCABCABCABC"の中で最初に出現するAをYYYに置き換え、変数resultに代入。
 - [3] 変数resultを出力。
 
このように最初に一致した部分のみが変更される。
該当した文字列すべてを置換する(replaceAll)
replaceAll(String regrex , String replacement)
regrex:置換前の文字列 replacement:置換後の文字列
| 
 戻り値の型  | 
 String  | 
| 
 内容  | 
 指定した正規表現に一致する部分を、指定した文字列で置き換える。  | 
replaceAll(String regrex, String replacement)は、文字列にregrexと一致するものがあった場合すべてreplacementに置き換えて値を返すメソッドだ。
サンプルコード
| 
					 1 2 3 4 5 6 7 8 9  | 
						 public class StringSample13 {     public static void main(String[] args) {         String message ;          message = "ABCABCABCABCABC";//[1]         String result = message.replaceAll("A","YYY");//[2]         System.out.println("もとの文字列:" + message);         System.out.println("置換した文字列:" + result);//[3]        } }   | 
					
実行結果
| 
					 1 2  | 
						もとの文字列:ABCABCABCABCABC 置換した文字列:YYYBCYYYBCYYYBCYYYBCYYYBC  | 
					
サンプルコードの説明
- [1] String型の変数messageを初期化。
 - [2] replaceAllメソッドを使用してmessageに代入されている"ABCABCABCABCABC"の中に出現するAをすべてYYYに置き換え、変数resultに代入。
 - [3] 変数resultを出力。
 
注意点:置換前は「正規表現」
上では置換前・置換後と書けば動くようにお伝えしたが、厳密には違う。
replaceFirst,replaceAllともに注意したいのが、置換するときの検索文字列String regrexは正規表現を扱うものだということだ。regrexなので当たり前なのだが。
「○○に一致する」という複雑な条件を設定できる一方、単なる文字として一致させようとしたものが正規表現の特殊な意味ととられてしまい、意図したものとちがう動きをする場合がある。
サンプルコード
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						public class StringSample131 {     public static void main(String[] args) {         String message ;          message = "A.B.C.D";//[1]         String result1 = message.replaceAll(".","1");//[2]         System.out.println("もとの文字列:" + message);         System.out.println("エスケープなしで置換した文字列:" + result1);//[3]         String result2 = message.replaceAll("\\.","1");//[4]         System.out.println("もとの文字列:" + message);         System.out.println("エスケープして置換した文字列:" + result2);//[5]     } }  | 
					
実行結果
| 
					 1 2 3 4  | 
						もとの文字列:A.B.C.D エスケープなしで置換した文字列:1111111 もとの文字列:A.B.C.D エスケープして置換した文字列:A1B1C1D  | 
					
サンプルコードの説明
- [1] String型の変数messageを初期化。
 - [2] replaceAllメソッドを使用してmessageに代入されている" A.B.C.D "の中に出現するドット(.)をエスケープなしで1に置き換え、変数result1に代入。
 - [3] 変数result1を出力→ エスケープされていないのでドットは単なる文字ではなく
 - 正規表現で意味するすべての文字を表すドットと解釈される。そのため、" A.B.C.D "すべて1に置き換わる。
 - [4] replaceAllメソッドを使用してmessageに代入されている" A.B.C.D "の中に出現するドット(.)をエスケープして1に置き換え、変数result2に代入。
 - [5] 変数result2を出力 → \\でエスケープすることで、ドットは単なる文字のドットと解釈され、" A.B.C.D "のドットの部分のみ1に置き換わる。
 
まとめ
このページではJavaで文字列を置換するための方法についてお伝えした。
- 最初のひとつだけ:replaceFirst
 - すべて置換:replaceAll
 
この二つのStringクラスメソッドを使い分ければ実行可能だ。

                    

