【サンプルコード付き】JavaのMatcherクラスrequireEnd()メソッドの使い方
JavaのMatcherクラスとrequireEnd()メソッドとは
java.util.regex.Matcherクラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスには公開されたコンストラクタは用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。
マッチが成立している状態で、MatcherクラスのrequireEnd()メソッドを呼び出すと、「これ以上入力が続いた場合に、現在のマッチ結果がfalse(不成立)に変わる可能性があるかどうか」を判定できます。可能性がある場合はtrueを、そうでない場合はfalseを返します。
戻り値の意味
- true:追加の入力によって、現在成立しているマッチが失敗に変わる可能性がある。
- false:どれだけ入力データが増えても、マッチ結果は変わらない。
例えば、正規表現「you$」を使って入力文字列の末尾の単語「you」にマッチさせようとしている場合を考えてみましょう。最初の入力行が「hello how are you」であればマッチが成立します。しかし、その後さらに文が入力されると、新しい行の末尾の単語が目的の「you」とは限らず、マッチ結果がfalseに変わる可能性があります。このようなケースでは、requireEnd()メソッドはtrueを返します。
一方、入力の中の特定の文字(例:#)を探す場合、最初の入力行が「Hello # how are you」であればマッチが成立します。追加の入力データによってマッチャーの内容は変わりますが、結果(true)自体は変わりません。このようなシナリオでは、requireEnd()メソッドはfalseを返します。
使用例1:文末の単語「you」にマッチさせる(you$)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RequireEndExample {
public static void main( String args[] ) {
String regex = "you$";
// ユーザーからの入力を読み込む
Scanner sc = new Scanner(System.in);
System.out.println("入力テキストを入力してください: ");
String input = sc.nextLine();
// Patternクラスをインスタンス化
Pattern pattern = Pattern.compile(regex);
// Matcherクラスをインスタンス化
Matcher matcher = pattern.matcher(input);
// マッチが発生したかどうかを確認
if(matcher.find()) {
System.out.println("マッチが見つかりました");
}
boolean result = matcher.requireEnd();
if(result) {
System.out.println("追加の入力により、マッチ結果がfalseになる可能性があります");
} else {
System.out.println("追加データがあっても、マッチ結果はtrueのままです");
}
}
}
実行結果
入力テキストを入力してください: Hello how are you マッチが見つかりました 追加の入力により、マッチ結果がfalseになる可能性があります
パターン「you$」は入力の末尾に依存しているため、これ以上テキストが追加されると末尾の単語が変わり、マッチ結果が崩れる可能性があります。そのためrequireEnd()はtrueを返しています。
使用例2:特定の文字「#」にマッチさせる([#])
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RequireEndExample {
public static void main( String args[] ) {
String regex = "[#]";
// ユーザーからの入力を読み込む
Scanner sc = new Scanner(System.in);
System.out.println("入力テキストを入力してください: ");
String input = sc.nextLine();
// Patternクラスをインスタンス化
Pattern pattern = Pattern.compile(regex);
// Matcherクラスをインスタンス化
Matcher matcher = pattern.matcher(input);
// マッチが発生したかどうかを確認
if(matcher.find()) {
System.out.println("マッチが見つかりました");
}
boolean result = matcher.requireEnd();
if(result) {
System.out.println("追加の入力により、マッチ結果がfalseになる可能性があります");
} else {
System.out.println("追加データがあっても、マッチ結果はtrueのままです");
}
}
}
実行結果
入力テキストを入力してください: Hello# how# are you マッチが見つかりました 追加データがあっても、マッチ結果はtrueのままです
パターン「[#]」は文中のどこにある「#」にもマッチするため、入力がどれだけ増えても、すでに見つかったマッチ結果が無効になることはありません。そのためrequireEnd()はfalseを返します。
まとめ
requireEnd()メソッドは、標準入力やネットワークストリームのように入力が段階的に与えられる状況で特に役立ちます。「$」など入力の末尾に依存するパターンでは追加入力の影響を受けるためtrueを返し、文中の固定文字を探すだけのパターンでは結果が変わらないためfalseを返します。リアルタイムにデータを受け取りながらマッチングを行うアプリケーションでは、このメソッドを使うことで「現時点で結果を確定できるか」「さらなる入力を待つべきか」を正確に判断できます。
-
【サンプルコード付き】JavaのMatcherクラスrequireEnd()メソッドの使い方
JavaのMatcherクラスとrequireEnd()メソッドとは java.util.regex.Matcherクラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスには公開されたコンストラクタは用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 マッチが成立している状態で、MatcherクラスのrequireEnd()メソッドを呼び出すと、「これ以上入力が続いた場合に、現在のマッチ結果がfalse(不成立)に変わる可能性があるかどうか」を判定できます。可能性がある場合はt
-
例で学ぶJava Matcherクラスのpattern()メソッド
java.util.regex.Matcher クラスは、正規表現による各種マッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されていないため、java.util.regex.Pattern クラスの matcher() メソッドを使用してオブジェクトを生成・取得します。 pattern() メソッドは、現在の Matcher が解釈に使用している Pattern オブジェクトを取得して返します。引数は不要で、戻り値は java.util.regex.Pattern 型です。「実際にどの正規表現で照合を行ったのか」を後から確認したい場合などに便利なメソッドです。