JavaのMatcherクラスtoString()メソッドの使い方|サンプルコード付きで解説
java.util.regex.Matcher クラスは、正規表現を用いた各種マッチ操作を実行する「エンジン」を表すクラスです。このクラスには公開されたコンストラクタが用意されておらず、java.util.regex.Pattern クラスの matcher(CharSequence) メソッドを呼び出して Matcher オブジェクトを取得します。
Matcher クラスの toString() メソッドは、現在の Matcher オブジェクトの状態を表す文字列を返します。返される文字列には、使用している正規表現パターン、検索対象のリージョン(開始・終了インデックス)、最後にマッチした文字列といった情報が含まれており、デバッグ時やログ出力の際に内部状態を確認するのに便利です。
toString() メソッドのシグネチャ
public String toString()
引数は受け取らず、Matcher の内容を表す String を戻り値として返します。Object クラスの toString() をオーバーライドしている点にも注目してください。
サンプルコード
次のプログラムでは、ユーザーから入力されたテキストに含まれる特殊文字(# % & *)の個数を数え、その後で使用した Matcher オブジェクトの文字列表現を出力します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ToStringExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("入力テキストを入力してください:");
String input = sc.nextLine();
String regex = "[#%&*]";
// Patternオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを作成
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
// 結果を表示
System.out.println("テキストに含まれる特殊文字 [# % & *] は " + count + " 個です");
System.out.println("使用したMatcherの文字列表現:\n" + matcher.toString());
}
}
実行結果
入力テキストを入力してください: Hello# How # are# you *& welcome to T#utorials%point テキストに含まれる特殊文字 [# % & *] は 7 個です 使用したMatcherの文字列表現: java.util.regex.Matcher[pattern=[#%&*] region=0,52 lastmatch=]
出力の読み方
toString() が返す文字列は、主に次の3つの情報で構成されています。
- pattern= … Matcher が使用している正規表現パターン。この例では
[#%&*]です。 - region= … 検索対象となる入力文字列の範囲(開始インデックス, 終了インデックス)。
region(int start, int end)メソッドを使えば、検索範囲を部分的に絞り込むことも可能です。 - lastmatch= … 最後に成功したマッチの文字列。上記の例では
find()ループが完了した後の状態のため、空文字になっています。
まとめ
Matcher クラスの toString() メソッドを使えば、パターンやリージョン、直近のマッチ結果など Matcher の内部状態をひと目で把握できます。正規表現処理が意図どおりに動作しないときのデバッグ手段として、ぜひ活用してみてください。
-
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文字に一致します。以下の例では、この文字クラ