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(","));
最後に
意外とこんがらがったりするのでしっかり理解していきたい。