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

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

Pattern.asPredicate()メソッドの概要

java.util.function パッケージに含まれる Predicate インターフェースは、ラムダ式のターゲットとして利用できる関数型インターフェースです。このインターフェースが持つ test() メソッドは、引数として受け取った値を検証し、条件に一致すれば true、一致しなければ false を返します。

一方、java.util.regex.Pattern クラスの asPredicate() メソッドは、現在の Pattern オブジェクトのコンパイルに使用された正規表現と文字列を照合できる Predicate<String> オブジェクトを返します。これにより、正規表現によるマッチング処理を、Stream API のフィルタリングなどラムダ式や関数型インターフェースを活用した処理に自然に組み込むことができます。

構文

public Predicate<String> asPredicate()

例1:入力文字列が正規表現にマッチするか判定する

次の例では、ユーザーから入力された文字列に対して、正規表現から生成した Predicate を使ってマッチングを行います。

import java.util.Scanner;
import java.util.function.Predicate;
import java.util.regex.Pattern;

public class AsPredicateExample {
   public static void main(String args[]) {
      // 文字列の読み込み
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter input string");
      String input = sc.nextLine();

      // 文字 "t" にマッチする正規表現
      String regex = "[t]";

      // 正規表現をコンパイル(大文字小文字を区別しない)
      Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

      // 正規表現を Predicate に変換
      Predicate<String> predicate = pattern.asPredicate();

      // 入力文字列を使って Predicate をテスト
      boolean result = predicate.test(input);

      if(result) {
         System.out.println("Match found");
      } else {
         System.out.println("Match not found");
      }
   }
}

出力結果

Enter input string
Tutorialspoint
Match found

例2:リスト内の要素を正規表現でフィルタリングする

asPredicate() は、リストの各要素をラムダ式で簡潔に判定したい場合にも便利です。次の例では、文字列リストの中から「J」を含む要素だけを抽出しています。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.regex.Pattern;

public class AsPredicateExample {
   public static void main(String args[]) {
      ArrayList<String> list = new ArrayList<String>();
      list.addAll(Arrays.asList("Java", "JavaFX", "Hbase", "JavaScript"));

      // 文字 "J" にマッチする正規表現
      String regex = "[J]";

      // 正規表現をコンパイル
      Pattern pattern = Pattern.compile(regex);

      // 正規表現を Predicate に変換
      Predicate<String> predicate = pattern.asPredicate();

      // リストの各要素に対してマッチングを実行
      list.forEach(n -> {
         if (predicate.test(n)) {
            System.out.println("Match found: " + n);
         }
      });
   }
}

出力結果

Match found: Java
Match found: JavaFX
Match found: JavaScript

まとめ

Pattern.asPredicate() メソッドを使うことで、正規表現による文字列照合を Predicate オブジェクトとして扱えます。forEach や filter などのラムダ式ベースの処理と組み合わせることで、マッチングロジックを簡潔かつ可読性高く記述できるのが大きなメリットです。

  1. JavaのPattern.matcher()メソッドの使い方を実例で解説

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するmatcher()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取り、現在のPatternオブジェクトが表す正規表現と入力文字列を照合するためのMatcherオブジェクトを返します。 matcher()メソッドの基本的な流れ matcher()メソッドを使った正規表現マッチングは、一般的に以下の手順で行い

  2. 【Java】Pattern.compile()メソッドの使い方を具体例でわかりやすく解説

    java.util.regex パッケージに含まれる Pattern クラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが持つ compile() メソッドは、正規表現を表す文字列を受け取り、その正規表現をコンパイルした Pattern オブジェクトを返します。 基本的な構文 compile() メソッドの最もシンプルな形式は、引数として正規表現の文字列を1つ受け取ります。 Pattern pattern = Pattern.compile(regex); コンパイル済みの Pattern オブジェクトから matcher() メソッドを呼び出すことで Matcher オブジェ