Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java正規表現で一致した文字列をすべて置き換える方法|replaceAll()の使い方

Javaで正規表現を扱う際、入力文字列の中からパターンに一致した部分を別の文字列へ置き換えたいケースはよくあります。そのような場合には、MatcherクラスreplaceAll()メソッドを使用します。

基本的な手順は以下のとおりです。

  1. Pattern.compile()メソッドで正規表現をコンパイルし、Patternオブジェクトを作成する
  2. Patternオブジェクトのmatcher()メソッドに入力文字列を渡し、Matcherオブジェクトを取得する
  3. MatcherオブジェクトのreplaceAll()メソッドを呼び出して、一致したすべての箇所を置換する

replaceAll()メソッドは、引数として置換後の文字列を受け取り、入力文字列内のすべての一致箇所をその文字列で置き換えた結果を返します。元の文字列自体は変更されず、新しい文字列が返される点に注意してください。

例1:タブ文字をスペースに置き換える

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReplaceAll {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "\\t+";
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // 文字列に対してコンパイル済みパターンを適用
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("No.of matches: " + count);
        String result = matcher.replaceAll(" ");
        System.out.println("Result: " + result);
    }
}

実行結果

Enter input text:
sample	text	with	tab	spaces
No.of matches: 4
Result: sample text with tab spaces

この例では、正規表現「\t+」によって1つ以上連続するタブ文字に一致させ、それらをすべて半角スペース1つに置き換えています。まずfind()メソッドで一致件数をカウントし、その後replaceAll()で一括置換を行っています。

なお、すべてではなく最初に一致した箇所だけを置き換えたい場合は、MatcherクラスのreplaceFirst()メソッドを使用します。

例2:最初の数字だけを置き換える

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReplaceAll {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "\\d";
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // 文字列に対してコンパイル済みパターンを適用
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("No.of matches: " + count);
        String result = matcher.replaceFirst("#");
        System.out.println("Result: " + result);
    }
}

実行結果

Enter input text:
test data 1 2 3
No.of matches: 3
Result: test data # 2 3

この例では、正規表現「\d」(1桁の数字)に一致する箇所が3件見つかっていますが、replaceFirst()を使用しているため、最初の「1」だけが「#」に置き換えられ、残りの「2」と「3」はそのまま出力されます。

まとめ

  • 入力文字列内のすべての一致箇所を置換する → replaceAll()
  • 最初の一致箇所のみを置換する → replaceFirst()

どちらのメソッドも置換結果を新しい文字列として返すため、必要に応じて変数に代入して活用しましょう。

  1. 【Java】正規表現のメタ文字\B(非単語境界)の使い方をサンプルコードで解説

    Javaの正規表現におけるメタ文字「\B」は、単語境界以外の位置(非単語境界)にマッチします。この記事では、\Bの基本的な意味と、サンプルコードによる具体的な動作をわかりやすく解説します。 メタ文字\Bとは 正規表現の\bは「単語境界」、すなわち単語文字([a-zA-Z_0-9])とそれ以外の文字の境目にある位置にマッチします。\Bはその逆で、次のような単語境界になっていない位置にマッチします。 単語文字と単語文字の間(例:「ab」の「a」と「b」の間) 非単語文字と非単語文字の間(例:「!@」の「!」と「@」の間) また、\Bはゼロ幅アサーションと呼ばれる種類のパターンのため、マッチし

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp