javaで文字列をある特定の区切り文字で分割したいケースでよく使うsplitですが、第二引数の動作仕様を毎回忘れてしまうので備忘録としてメモします。
Java SE7, 8, 9でいづれも同じ動作仕様のようです。
String#split(String regex, int limit)の動き
入力文字列"あ,い,う,え,お,,"
に対してカンマ文字を区切りで分割したい場合を考えます。
第二引数limit指定なしの場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",");
for(int i=0; i<splited.length; i++) {
System.out.println("[" + i + "]" + splited[i]);
}
実行結果は
[0]あ
[1]い
[2]う
[3]え
[4]お
⇒最後の空文字は無視されます。
第二引数limitに -1 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", -1);
実行結果は
[0]あ
[1]い
[2]う
[3]え
[4]お
[5]
[6]
⇒最後の空文字も分割対象となります。
第二引数limitに 0 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 0);
実行結果は
[0]あ
[1]い
[2]う
[3]え
[4]お
⇒引数指定なしと同じ結果です(デフォルトのlimit値が0)。
第二引数limitに 1 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 1);
実行結果は
[0]あ,い,う,え,お,,
⇒1つに分割ということで分割されません。
第二引数limitに 2 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 2);
実行結果は
[0]あ
[1]い,う,え,お,,
⇒2つに分割されます。
第二引数limitに 3 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 3);
実行結果は
[0]あ
[1]い
[2]う,え,お,,
⇒3つに分割されます。
第二引数limitに 7 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 7);
実行結果は
[0]あ
[1]い
[2]う
[3]え
[4]お
[5]
[6]
⇒7つに分割されます。※空も分割対象
第二引数limitに 8以上 を指定した場合
String data = "あ,い,う,え,お,,";
String[] splited = data.split(",", 8);
実行結果は
[0]あ
[1]い
[2]う
[3]え
[4]お
[5]
[6]
⇒特にエラーなく7つに分割されます。
以上。