splitメソッドについて

使い方は以下である。

// 第二引数は省略可能
String 型変数名.split("区切り文字", 分割後の要素数)

// 区切り文字は正規表現も可能
t = "a1b2c3";
String text = t.split([0-9]);
System.out.println(text); // [a,b,c]

で、公式ドキュメントにのっている例("boo:and:foo")は以下。

Regex Limit Result
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }

引用:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

第二引数の分割後の要素数

第二引数は省略可能。 文字列の分割は「分割後の要素数」で指定された回数-1になるまで行われる。

第二引数が0より大きいか小さいかで意味合いが変わる。

場合|分割後の要素数 第二引数 > 0|指定した引数の値以下 第二引数 = 0|要素数は制限されない。配列の終わりの空のの文字列は削除。 第二引数 < 0|要素数は制限されない。配列の終わりの空のの文字列は削除されない。

第二引数が0より大きい場合
String foodsPlus = "卵, 人参, 白菜, ごぼう";

String[] foodsPlusArray = foodsPlus.split("," , 3);
for(String food: foodsPlusArray){
  System.out.println(food);
}
System.out.println("配列のサイズ = " + foodsArray.size());

結果は以下。(おそらく。調べて)

卵
人参
白菜, ごぼう
配列のサイズ = 3

あと以下の場合どうなるのかも調べる。

String foods = "卵, 人参,, 白菜, ごぼう,,";
第二引数が0の場合
String foodsZero = "卵, 人参,, 白菜, ごぼう,,";
String[] foodsZeroArray = foodsMinus.split("," , 0);
for(String food: foodsZeroArray){
  System.out.println(food);
}
System.out.println("配列のサイズ = " + foodsZeroArray.size());

結果は以下。

卵
人参

白菜
ごぼう
配列のサイズ = 5

第二引数が0のときはごぼう,,ごぼう以下の部分が削除される。 第二引数が-1のときは削除されない。

第二引数が0より小さい場合
String foodsMinus = "卵, 人参,, 白菜, ごぼう,,";
String[] foodsMinusArray = foodsMinus.split("," , -1);
for(String food: foodsMinusArray){
  System.out.println(food);
}
System.out.println("配列のサイズ = " + foodsMinusArray.size());

結果は以下。

卵
人参

白菜
ごぼう


配列のサイズ = 7

第二引数が0以下のときはごぼう,,ごぼう以下の部分が削除されず、空の文字列は削除されない。

分割した結果をListで受け取る

List<String> fruits = Arrays.asList(str.split(","));

最後に

意外とこんがらがったりするのでしっかり理解していきたい。