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

【Java】Pattern.splitAsStream()メソッドの使い方をサンプルコード付きで解説

Patternクラスとは

java.util.regexパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスを利用することで、文字列に対して効率的なパターンマッチングや分割処理を実行できます。

splitAsStream()メソッドの概要

splitAsStream()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取り、パターンが一致するたびに文字列を新しい部分文字列へと分割します。そして、すべての部分文字列を含むStreamとして結果を返します。

従来のsplit()メソッドとの大きな違いは、戻り値が配列ではなくStreamであるという点です。そのため、Java 8以降のStream APIと組み合わせることで、フィルタリングや変換などの後続処理を柔軟かつ簡潔に記述できます。

サンプルコード

import java.util.regex.Pattern;
import java.util.stream.Stream;

public class SplitAsStreamMethodExample {
    public static void main(String args[]) {
        // 数字を検索するための正規表現
        String regex = "(\s)(\d)(\s)";
        String input = " 1 Name:Radha, age:25 2 Name:Ramu, age:32"
                      + " 3 Name:Rajeev, age:45 4 Name:Raghu, age:35"
                      + " 5 Name:Rahman, age:30";
        // 正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex);
        // マッチするかどうかを確認
        if (pattern.matcher(input).find())
            System.out.println("指定された文字列には数字が含まれています");
        else
            System.out.println("指定された文字列には数字が含まれていません");
        // 文字列を分割してStreamとして取得
        Stream<String> stream = pattern.splitAsStream(input);
        Object obj[] = stream.toArray();
        for (int i = 0; i < obj.length; i++) {
            System.out.println(obj[i]);
        }
    }
}

実行結果

指定された文字列には数字が含まれています
Name:Radha, age:25
Name:Ramu, age:32
Name:Rajeev, age:45
Name:Raghu, age:35
Name:Rahman, age:30

コードの解説

  1. 正規表現「(\s)(\d)(\s)」は、「空白文字+数字1桁+空白文字」という並びに一致します。
  2. Pattern.compile()メソッドで正規表現をコンパイルし、Patternオブジェクトを生成します。
  3. matcher().find()によって、入力文字列内にパターンが存在するかどうかを確認しています。
  4. splitAsStream()メソッドを呼び出すと、パターンに一致した箇所(各レコード先頭の番号1〜5)で文字列が分割され、残りの部分がStreamの要素となります。
  5. 最後にtoArray()でStreamを配列に変換し、forループで各要素を出力しています。

まとめ

splitAsStream()メソッドを使えば、正規表現に一致した箇所で文字列を分割し、その結果をStreamとして直接扱うことができます。大量のテキストデータを逐次的に処理したい場合や、Stream APIの豊富な中間操作・終端操作を活用したい場合に特に有効なメソッドです。

  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 オブジェ