JavaのMatcherクラスreplaceFirst()メソッドの使い方とサンプルコード解説
Javaで正規表現を扱う際、java.util.regex.Matcher クラスは、入力文字列に対してさまざまなマッチ操作を実行する「エンジン」の役割を担います。このクラスにはコンストラクタが用意されておらず、java.util.regex.Pattern クラスの matcher() メソッドを使ってオブジェクトを取得するのが一般的な使い方です。
本記事では、Matcherクラスが提供する replaceFirst() メソッドの基本的な使い方を、実際に動作するサンプルコードと実行結果とともにわかりやすく解説します。
replaceFirst()メソッドとは
replaceFirst() メソッドは、引数として受け取った文字列を使い、入力テキスト内で正規表現パターンに最初に一致した部分だけを置き換え、その結果を新しい文字列として返します。2番目以降の一致目以降の一致箇所はそのまま維持される点が特徴です。
基本構文
public String replaceFirst(String replacement)
サンプルコード1:特定の記号の最初の出現を置換する
次の例では、ユーザーから入力されたテキストに含まれる「#」の出現回数を数えたうえで、最初に出現した「#」のみを「@」に置き換えています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceFirstExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "[#]";
// パターンオブジェクトの生成
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトの生成
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
// 「#」の出現回数を表示
System.out.println("The are character # occurred " + count + " times in the given text");
// 最初の出現箇所を「@」に置換
String result = matcher.replaceFirst("@");
System.out.println("Text after replacing the first occurrence of # with @ \n" + result);
}
}実行結果
Enter input text: Hello# How # are# you #welcome to Tutorials#point The are character # occurred 5 times in the given text Text after replacing the first occurrence of # with @ Hello@ How # are# you #welcome to Tutorials#point
出力を見ると、テキスト中の「#」は合計5回出現していますが、実際に置き換えられているのは先頭の1箇所だけで、残りの4箇所は元のまま残っていることが確認できます。
サンプルコード2:最初の空白文字を置換する
続いて、正規表現 \s+ を使って連続する空白にマッチさせ、最初に一致した空白をアンダースコア「_」に置き換える例を紹介します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceFirstExample {
public static void main(String args[]) {
// ユーザーから文字列を入力してもらう
System.out.println("Enter a String");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\s+";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
// 最初の空白を「_」に置換
String result = matcher.replaceFirst("_");
System.out.print("Text after replacing the first space with '_': \n" + result);
}
}実行結果
Enter a String hello this is a sample text with irregular spaces Text after replacing the first space with '_': hello_this is a sample text with irregular spaces
まとめ
replaceFirst()は、正規表現に一致した最初の部分のみを指定した文字列で置換するメソッドです。- すべての一致箇所を一括で置換したい場合は、代わりに
replaceAll()メソッドを使用します。 - 置換処理の実行時にマッチャーの状態はリセットされるため、
find()による走査後でも安全に呼び出せます。
-
JavaのMatcher.matches()メソッドとは?使い方をサンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 matches()メソッドは、対象の文字列全体が、Patternオブジェクトの作成時に指定された正規表現パターンと一致するかどうかを判定します。一致する場合はtrueを返し、一致しない場合はfalseを返します。重要なポイントとして、このメソッドがtrueを返すためには、検索対象の領域全体がパターンに一致し
-
JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ