文字列をパターンとマッチする部分で分割する(Pattern.split)

Pattern クラスの split メソッドを使うことで、パターンとマッチする部分を区切りとして対象となる文字列を分割することができます。分割する回数に制限を付けたり無制限に分割することもできます。ここでは Java の正規表現でパターンとマッチする部分で文字列を分割する方法について解説します。

(Last modified: )

正規表現を使って文字列を分割する

正規表現を使って対象の文字列を分割するには Pattern クラスの split メソッドを使用します。書式は次のとおりです。

public String[] split(CharSequence input, int limit)

パラメータ:
input - 分割される文字シーケンス
limit - 結果のしきい値(上記のとおり)

戻り値:
このパターンのマッチの両端で入力を分割することによって計算された文字列の配列

1 番目の引数に対象となる文字列を指定し、 2 番目の引数に分割回数の制限を指定します。分割された文字列は String 型の配列として返されます。

分割回数の制限に 0 を指定した場合は、分割する回数に制限はなくなりますが分割された文字列の最後に空文字が含まれている場合は空文字をすべて取り除いたものを返します。負の値を指定した場合は 0 の場合と同様に分割する回数に制限がなく、また空文字が最後に含まれていてもそのまま返します。正の値を指定した場合は、分割された文字列の数が指定した数以下となるように分割されます。

例えば "AB:CD:EF" という文字列に対してパターン ":" で分割を行う場合、 "AB" "CD" "EF" の 3 つに分割されます。分割回数の制限に 0 や -1 などの負の値を指定した場合は 3 つに分割されますが、 2 を指定した場合は "AB" と "CDEF" のように 2 つに分割されます。

また "AB:CD:EF::" という文字列に対してパターン ":" で分割を行う場合、 "AB" "CD" "EF" "" "" の 5 つに分割されます。分割回数の制限に -1 などの負の値を指定した場合は 5 つに分割されますが、 0 を指定した場合は最後にある空文字はすべて除去されるので "AB" "CD" "EF" の 3 つに分割されます。

次のサンプルをみてください。

// java.util.regex.*のインポートが必要です
import java.util.regex.*;

String regex  = ":";
Pattern p = Pattern.compile(regex);

String[] result = p.split("AB:CD:EF", 0);

分割回数の制限に 0 を指定して対象の文字列をパターンとマッチする部分で分割しました。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample30-1.java という名前で保存します。

import java.util.regex.*;

class JSample30_1{
  public static void main(String[] args){
    String regex  = "\\|";
    Pattern p = Pattern.compile(regex);

    String[] result = p.split("AA|BBB|CC|", -1);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }

    System.out.println("-- --");

    result = p.split("AA|BBB|CC|", 0);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }

    System.out.println("-- --");

    result = p.split("AA|BBB|CC|", 2);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample30_1.java

その後で、次のように実行してください。

java JSample30_1

正規表現を使って文字列を分割する(1)

分割回数の制限に、 -1 、 0 、 2 をそれぞれ指定して文字列を分割した結果を取得しました。

-- --

Java の正規表現でパターンとマッチする部分で文字列を分割する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。