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

【Java】MatcherクラスのlookingAt()メソッドの使い方を例題付きで解説


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

MatcherクラスのlookingAt()メソッドは、リージョン(検索対象領域)の先頭から入力テキストとパターンの照合を行います。先頭からパターンに一致すればtrueを返し、一致しなければfalseを返します。matches()メソッドと異なり、リージョン全体がパターンに一致していなくても、先頭さえ一致していればtrueを返す点が特徴です。

lookingAt()・matches()・find()の違い

  • matches():入力文字列全体がパターンと完全に一致する場合にのみtrueを返します。
  • lookingAt():入力の先頭からパターンに一致すればtrueを返します(全体一致は不要)。
  • find():入力内のどの位置にあっても、パターンに一致する部分が存在すればtrueを返します。

サンプルコード1

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

public class Test {
    public static void main(String[] args) {
        String regex = "(.*)(\\d+)(.*)";
        String input = "This is a sample Text, 1234, with numbers in between. "
                + "\\n This is the second line in the text "
                + "\\n This is third line in the text";

        // パターンオブジェクトの作成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトの作成
        Matcher matcher = pattern.matcher(input);

        // マッチするかどうかを確認
        if (matcher.lookingAt()) {
            System.out.println("マッチが見つかりました");
        } else {
            System.out.println("マッチは見つかりませんでした");
        }
    }
}

実行結果

マッチが見つかりました

コードの解説

この例では、正規表現「(.*)(\d+)(.*)」を使って、先頭行に数字を含むテキストがパターンと一致するかどうかを確認しています。入力の先頭部分がパターンに一致しているため、リージョン全体が一致していなくてもlookingAt()はtrueを返します。

サンプルコード2

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

public class LookingAtExample {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);

        System.out.println("文字列1を入力してください:");
        String input1 = sc.nextLine();
        System.out.println("文字列2を入力してください:");
        String input2 = sc.nextLine();
        System.out.println("文字列3を入力してください:");
        String input3 = sc.nextLine();

        String input = input1 + "\\n" + input2 + "\\n" + input3;
        System.out.println(input);

        // 数字を含む行に一致する正規表現
        String regex = ".*\\d+.*";
        // 正規表現をコンパイルしてMatcherを取得
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        // マッチしたかどうかを確認
        boolean bool = matcher.lookingAt();
        if (bool) {
            System.out.println("入力された文字列には数字が含まれています");
        } else {
            System.out.println("入力された文字列に数字は含まれていません");
        }
    }
}

実行結果

文字列1を入力してください:
sample text2
文字列2を入力してください:
data
文字列3を入力してください:
sample
sample text2
data
sample
入力された文字列には数字が含まれています

コードの解説

この例では、キーボードから3行の文字列を入力し、それらを改行で連結した文字列に対して、正規表現「.*\d+.*」でlookingAt()を実行しています。先頭の行「sample text2」に数字の「2」が含まれているためtrueが返され、「入力された文字列には数字が含まれています」と表示されます。

注意点:lookingAt()はあくまで「先頭からの一致」を判定するメソッドです。デフォルト設定ではドット(.)は改行に一致しないため、数字が2行目以降にしか存在しない場合はfalseが返されます。入力全体から任意の位置の一致を探したい場合はfind()メソッドを使用しましょう。

  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文字に一致します。以下の例では、この文字クラ