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

【Java】Patternクラスのsplit()メソッドの使い方を実行例つきで解説

Pattern.split()メソッドとは

java.util.regexパッケージのPatternクラスは、正規表現をコンパイルした結果を保持するクラスです。コンパイル済みの正規表現オブジェクトは再利用できるため、同じパターンで繰り返しマッチングを行う場合に効率的です。

このクラスが提供するsplit()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取ります。そして、正規表現パターンに一致する箇所ごとに入力文字列を分割し、分割されたすべてのトークン(部分文字列)を格納したString型の配列を返します。

基本的な使用例

次の例では、「空白+数字+空白」というパターンに一致する箇所で文字列を分割しています。

import java.util.regex.Pattern;

public class SplitMethodExample {
    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:Rajev, age:45";

        // 正規表現をコンパイルしてPatternオブジェクトを生成
        Pattern pattern = Pattern.compile(regex);

        // マッチが存在するかどうかを確認
        if (pattern.matcher(input).find())
            System.out.println("指定された文字列には数字が含まれています");
        else
            System.out.println("指定された文字列には数字が含まれていません");

        // 文字列を分割
        String strArray[] = pattern.split(input);
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }
    }
}

実行結果

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

limit引数を使用した例

split()メソッドには、パターンを適用する回数(limit)を指定できるオーバーロード版も用意されています。第2引数に整数値を渡すことで、結果として得られる配列の長さを制御できます。

次の例では、limitとして「4」を指定しています。この場合、パターンの適用は最大3回までに制限され、それ以降の残りの文字列は最後の要素にそのまま格納されます。

import java.util.regex.Pattern;

public class SplitMethodExample {
    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 = Pattern.compile(regex);

        // マッチが存在するかどうかを確認
        if (pattern.matcher(input).find())
            System.out.println("指定された文字列には数字が含まれています");
        else
            System.out.println("指定された文字列には数字が含まれていません");

        // 文字列を分割(limit = 4)
        String strArray[] = pattern.split(input, 4);
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }
    }
}

実行結果

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

limit値による挙動の違い

limit引数に指定する値によって、split()メソッドの動作は次のように変化します。

  • limit > 0: パターンは最大「limit − 1」回まで適用され、配列の長さはlimit以下になります。
  • limit = 0: パターンは可能な限り何度でも適用されますが、末尾の空文字列は結果から除外されます。
  • limit < 0: パターンは可能な限り何度でも適用され、末尾の空文字列も結果に含まれます。

このように、split()メソッドを使えば正規表現ベースの柔軟な文字列分割が簡単に実装できます。単純な区切り文字での分割にはStringクラスのsplit()でも十分ですが、より複雑なパターンで分割したい場合はPatternクラスのsplit()が有効です。

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