【Java】正規表現/replaceAll/replaceFirstメソッドを使って文字列を置換する!
文字列を置換するにはreplaceメソッドが思い浮かぶと思いますが、replaceメソッドは置換する対象の文字列を指定しなければならない為、複雑な文字列の置換には対応が難しいです。
しかし、正規表現とreplaceAllメソッド、またはreplaceFirstメソッドを使うことで単純な文字列のパターンから複雑な文字列のパターンまで簡単に置換することができます。
今回は正規表現とreplaceAll、replaceFirstメソッドを使って文字列の置換を行ってみます。
目次
正規表現とは
正規表現とは「いくつかの文字列を一つの形式で表現するための表現方法」のことで、この表現方法を利用すれば大量の文字列の中から容易に見つけたい文字列を検索することができます。
また、正規表現で用意されている構文や特殊な文字を組み合わせる事で、単純な条件や複雑な条件のパターンを簡潔に検索し、定義することも出来ます。
replaceAllメソッドとは
replaceAllメソッドは文字列に対して指定したパターンに一致する部分を全て他の文字で置き換えることができます。
replaceAllメソッドの書き方
replaceAllメソッドの構文は下記となります。
1 |
文字列1.replaceAll(正規表現, 文字列2) |
()の引数の文字列2を指定することで、文字列1を正規表現で指定したパターンを文字列2に全て置き換えるようになります。
replaceFirstメソッドとは
equalsメソッドとは、文字列の比較を行うことができます。
一致するときにtrueを返し、一致しない場合にはfalseを返すようになります。
replaceFirst()メソッドの書き方
equals()メソッドの構文は下記となります。
1 |
文字列1.replaceFirst(正規表現, 文字列2) |
()の引数の文字列2を指定することで、文字列1を正規表現で指定した最初の1パターンを文字列2に置き換えるようになります。
正規表現で文字列を比較したサンプルコード
replaceAll、replaceFirstを使って、正規表現で文字列を比較したサンプルコードを見てみます。
replaceAll()メソッドの場合
replaceAllメソッドを使って文字列の比較を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
iimport java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // 対象の文字列 String price = "卵:98円 ハム:298円"; System.out.println("String --------"); // String すべてのパターン replaced = price.replaceAll("([0-9]+)円", "\\$$1"); System.out.println("replaceAll:\"" + price + "\" ⇒ \"" + replaced + "\""); System.out.println("Matcher --------"); // Matcherの作成 pattern = Pattern.compile("([0-9]+)円"); matcher = pattern.matcher(price); //Matcher すべてのパターン replaced = matcher.replaceAll("\\$$1"); System.out.println("replaceAll:\"" + price + "\" ⇒ \"" + replaced + "\""); } } |
出力結果
String ——–
replaceAll:”卵:98円 ハム:298円” ⇒ “卵:$98 ハム:$298”
Matcher ——–
replaceAll:”卵:98円 ハム:298円” ⇒ “卵:$98 ハム:$298”
replaceFirst()メソッドの場合
compareToメソッドを使って文字列の比較を行ってみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// 正規表現を使って文字列を置換する import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // 対象の文字列 String price = "卵:98円 ハム:298円"; System.out.println("String --------"); // String 最初の1パターンのみ String replaced = price.replaceFirst("[0-9]+", "50"); System.out.println("replaceFirst:\"" + price + "\" ⇒ \"" + replaced + "\""); System.out.println("Matcher --------"); // Matcherの作成 Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(price); // Matcher 最初の1パターンのみ replaced = matcher.replaceFirst("50"); System.out.println("replaceFirst:\"" + price + "\" ⇒ \"" + replaced + "\"" ); } } |
出力結果
String ——–
replaceFirst:”卵:98円 ハム:298円” ⇒ “卵:50円 ハム:298円”
Matcher ——–
replaceFirst:”卵:98円 ハム:298円” ⇒ “卵:50円 ハム:298円”
今回のポイント
正規表現で文字列を置換するには2種類の方法がある
正規表現を使って文字列を置換するにはreplaceAllメソッドかreplaceFirstメソッドを使用する
• replaceAllメソッドとreplaceFirstメソッドは、共に第1パラメータの正規表現パターンを第2パラメータの文字列に置換します。
• replaceFirstメソッドは最初の1パターンのみ置換しますが、replaceAllメソッドは文字列中に出てくるすべてのパターンを置換します。
• 今回紹介したコードで、replaceAllメソッドで呼び出している部分では「XX円」を「$XX」に置換しています。
• また、MacterクラスのreplaceAllメソッドとreplaceFirstメソッドは同じ処理を行いますので同じ置換処理を繰り返す場合は、Matcherクラスを使うようにしましょう。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。