文字列を正規表現パターンを使って分割する

String クラスで用意されている split メソッドを使用すると、対象の文字列を正規表現パターンとマッチする部分を区切りとして分割します。分割する回数に制限を加えることもできます。ここでは Java で文字列を正規表現パターンを使って分割する方法について解説します。

(Last modified: )

String.splitメソッドの使い方

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

public String[] split(String regex, int limit)

パラメータ:
regex - 正規表現の区切り
limit - 結果のしきい値

戻り値:
この文字列を指定された正規表現に一致する位置で分割して計算された文字列の配列

例外:
PatternSyntaxException - 正規表現の構文が無効な場合

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

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

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

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

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

String regex  = ";|:";
String str = "赤色:青色;黄色";

String[] result = str.split(regex, 0);

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

なお String クラスの split メソッドは、 Pattern クラスの split メソッドを使用した場合と同じです。 Java における正規表現の使用方法について詳しくは「Java正規表現の使い方」を参照されてください。

サンプルコード

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

class JSample20_1{
  public static void main(String[] args){
    String regex  = ";|:";
    String str = "赤色:青色;黄色:;";

    String[] result = str.split(regex, 0);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }

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

    result = str.split(regex, -1);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }

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

    result = str.split(regex, 2);
    for (int i = 0 ; i < result.length; i++){
      System.out.println("[" + result[i] + "]");
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample20_1.java

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

java JSample20_1

String.splitメソッドの使い方(1)

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

-- --

Java で文字列を正規表現パターンを使って分割する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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