文字列を分割する(split)
文字列を指定された正規表現に一致する位置で分割します。
split public String[] split(String regex, int limit)
この文字列を、指定された正規表現に一致する位置で分割します。 この文字列の各部分文字列を含むメソッドにより返される配列は、指定された式に一致する別の部分 文字列、またはその文字列の最後で終了します。配列内の部分文字列の順序は、この文字列内で出現 する順序になります。入力されたどの部分とも式が一致しない場合、配列は 1 つの要素 (つまり、 この文字列) だけを保持します。 limit パラメータは、このパターンの適用回数、つまり、返される配列の長さを制御します。制限 n がゼロより大きい場合、このパターンは n - 1回以下の回数が適用され、配列の長さは n 以下にな ります。配列の最後のエントリには、最後にマッチした区切り文字以降の入力シーケンスがすべて含 まれます。n が負の値の場合、このパターンの適用回数と配列の長さは制限されません。n がゼロの 場合、このパターンの適用回数と配列の長さは制限されませんが、後続の空の文字列は破棄されます。 パラメータ: regex - 正規表現の区切り limit - 結果のしきい値 (上記を参照) 戻り値: この文字列を指定された正規表現に一致する位置で分割して計算された文字列の配列 例外: PatternSyntaxException - 正規表現の構文が無効な場合
例えばCSV形式で記述された文字列を、カンマ(,)の位置で区切って取得する場合で考えて見ます。
String str = "りんご,レモン,すいか,ぶどう"; String[] fruit = str.split(",", 0);
上記を実行するとfruitの配列には下記のように格納されます。
fruit[0] = "りんご"; fruit[1] = "レモン"; fruit[2] = "すいか"; fruit[3] = "ぶどう";
このように対象となる文字列を指定した区切り文字によって分割し、それぞれを配列の要素として格納します。
2番目の引数は分割する回数です。負の値を指定した場合は制限無しとなります。また0を指定した場合、分割された後で最後の項目が空白の場合にはそれを配列に格納しません。次の例で確認して下さい。
String str = "りんご,,すいか,ぶどう,,,"; String[] fruit = str.split(",", -1);
上記を実行するとfruitの配列には下記のように格納されます。
fruit[0] = "りんご"; fruit[1] = ""; fruit[2] = "すいか"; fruit[3] = "ぶどう"; fruit[4] = ""; fruit[5] = ""; fruit[6] = "";
同じ文字列に対して2番目の引数に0を指定した場合は次の通りです。
String str = "りんご,,すいか,ぶどう,,,"; String[] fruit = str.split(",", 0);
上記を実行するとfruitの配列には下記のように格納されます。
fruit[0] = "りんご"; fruit[1] = ""; fruit[2] = "すいか"; fruit[3] = "ぶどう";
以上のように2番目の引数に0を指定した場合、末尾の位置で空白だけが入る配列要素は格納されません。
サンプルプログラム
では実際に試してみましょう。
class testString5{ public static void main(String args[]){ String str = "りんご,レモン,すいか,ぶどう"; String[] fruit = str.split(",", 0); for (int i = 0 ; i < fruit.length ; i++){ System.out.println(i + "番目の要素 = :" + fruit[i]); } } }
上記を実際にコンパイルして実行してみると下記のようになります。
( Written by Tatsuo Ikura )