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

Java MatcherクラスのregionStart()メソッドを例題でわかりやすく解説


MatcherクラスとregionStart()メソッドとは

java.util.regex.Matcherクラスは、入力文字列に対してパターン照合(マッチング)を行うエンジンを表すクラスです。このクラスにはコンストラクタが用意されていないため、java.util.regex.Patternクラスのmatcher()メソッドを使ってMatcherオブジェクトを取得します。

regionStart()メソッドは、現在のMatcherオブジェクトに設定されているリージョン(検索対象となる範囲)の開始インデックスをint型の整数値として返します。リージョンはregion(int start, int end)メソッドで設定でき、特に指定しない場合は文字列全体が対象となり、開始位置は0になります。

構文

public int regionStart()

例1:find()メソッドと組み合わせた使用例

次の例では、ユーザーに文字列の入力を求め、リージョンを2〜4番目の範囲に設定したうえで、文字「#」を検索しています。

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

public class RegionStartExample {
    public static void main(String[] args) {
        // 文字「#」に一致する正規表現
        String regex = "[#]";
        System.out.println("文字列を入力してください:");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを作成
        Matcher matcher = pattern.matcher(input);
        // リージョン(検索範囲)を2〜4に設定
        matcher.region(2, 4);
        if(matcher.find()) {
            System.out.println("一致が見つかりました");
        } else {
            System.out.println("一致は見つかりませんでした");
        }
        System.out.println("リージョンの開始位置:" + matcher.regionStart());
    }
}

実行結果

文字列を入力してください:
#sample text
一致は見つかりませんでした
リージョンの開始位置:2

入力された文字列「#sample text」に対してリージョンを2〜4に設定すると、検索対象は3文字目から4文字目までの「am」という部分だけになります。この範囲には「#」が含まれていないため一致は見つかりませんが、regionStart()は設定されたリージョンの開始位置である「2」を正しく返しています。

例2:matches()メソッドと組み合わせた使用例

次の例では、数字を含むパターンに対して、リージョンを5〜20に設定してmatches()を実行しています。

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

public class RegionStartExample {
    public static void main(String[] args) {
        String regex = "(.*)(\\d+)(.*)";
        String input = "124 This is a sample Text, 1234, with numbers in between.";
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを作成
        Matcher matcher = pattern.matcher(input);
        // リージョンを5〜20に設定
        matcher.region(5, 20);
        if(matcher.matches()) {
            System.out.println("一致が見つかりました");
        } else {
            System.out.println("一致は見つかりませんでした");
        }
        System.out.print("リージョンの開始位置:" + matcher.regionStart());
    }
}

実行結果

一致は見つかりませんでした
リージョンの開始位置:5

正規表現「(.*)(\d+)(.*)」は1つ以上の数字(\d+)を含む必要があります。しかし、リージョン(5〜20)として切り出された部分文字列「his is a sample」には数字が含まれていないため、matches()はfalseを返します。それでもregionStart()は、設定どおりの開始位置「5」を返します。

ポイントまとめ

  • regionStart()は、現在のリージョンの開始インデックスをint型で返します。
  • リージョンはregion(int start, int end)メソッドで変更でき、デフォルトでは0(文字列の先頭)です。
  • リージョンを設定すると、find()やmatches()などのマッチ操作はその範囲内でのみ実行されます。
  • リージョンの終了インデックスを取得したい場合は、regionEnd()メソッドを使用します。
  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文字に一致します。以下の例では、この文字クラ