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

【Java】MatcherクラスのregionEnd()メソッドの使い方と実行例

java.util.regex.Matcher クラスは、正規表現によるさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Pattern クラスの matcher() メソッドを使ってMatcherオブジェクトを生成・取得します。

Matcherクラスの regionEnd() メソッドは、現在のマッチャーオブジェクトに設定されている検索領域(リージョン)の終了インデックスをint型の整数値として返します。検索領域は region(int start, int end) メソッドで変更でき、領域を設定しない場合は入力シーケンス全体が対象となります。

ポイント

  • regionEnd() は検索対象となる領域の「終了位置(排他的インデックス)」を返す。
  • region() を呼び出すことで、マッチングの対象範囲を入力文字列の一部に限定できる。
  • 戻り値は int 型で、領域の終端インデックスそのものを示す。

例1:region()で領域を設定した場合

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionEndExample {
    public static void main(String[] args) {
        String regex = "(.*)(\\d+)(.*)";
        String input = "This is a sample Text, 1234, with numbers in between.";
        // パターンオブジェクトの作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトの作成
        Matcher matcher = pattern.matcher(input);
        // マッチャーの検索領域を設定
        matcher.region(5, 20);
        if(matcher.matches()) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
        System.out.print("End of the region: "+matcher.regionEnd());
    }
}

実行結果

Match not found
End of the region: 20

この例では、入力文字列に対して region(5, 20) によりインデックス5から20までの範囲だけをマッチング対象にしています。matches() は領域全体との完全一致を要求するため、切り出された部分文字列ではパターンに一致せず「Match not found」と表示されます。一方、regionEnd() の戻り値は設定した領域の終端である「20」になっていることが確認できます。

例2:ユーザー入力に対して領域を設定する場合

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionEndExample {
    public static void main(String[] args) {
        // 「#」に一致する正規表現
        String regex = "[#]";
        System.out.println("Enter a string: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // パターンオブジェクトの作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトの作成
        Matcher matcher = pattern.matcher(input);
        // 入力文字列に検索領域を設定
        matcher.region(2, 4);
        if(matcher.find()) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
        System.out.println("Ending of the region: "+ matcher.regionEnd());
    }
}

実行結果

Enter a string:
this is sample text #
Match not found
Ending of the region: 4

この例では、キーボードから入力された文字列に対して region(2, 4) で領域を限定しています。「#」という文字は入力文字列の末尾(領域外)にあるため find() は一致を見つけられず、「Match not found」が出力されます。そして regionEnd() は領域の終了インデックスである「4」を返しています。

まとめ

regionEnd() メソッドは、Matcherに現在設定されている検索領域の終了インデックスを取得するためのメソッドです。region() と組み合わせて使うことで、大きなテキストの中の特定の範囲だけを効率的にマッチング処理できます。領域の開始位置を知りたい場合は、同様に regionStart() メソッドを使用してください。

  1. JavaのMatcher.matches()メソッドとは?使い方をサンプルコード付きで解説

    java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 matches()メソッドは、対象の文字列全体が、Patternオブジェクトの作成時に指定された正規表現パターンと一致するかどうかを判定します。一致する場合はtrueを返し、一致しない場合はfalseを返します。重要なポイントとして、このメソッドがtrueを返すためには、検索対象の領域全体がパターンに一致し

  2. JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説

    java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ