本題
★やっちまったこと
とあるJavaプログラムの実装中に、以下のようにコードを書いていました。
String target = "1,2,3,4,5,,,,,"; String[] list = target.split(","); System.out.println(list.length);
この時、list.length(配列の長さ)は、【10】が返ってくるものだと勘違いしたまま実装を続けてしまいました。
実際に帰ってくる値は、【5】です。
Javaでは、Splitメソッドの第二引数に何も指定しない限り、最後の空文字が無視されるようです。
※↓のように、Javadocにも記載されていました。
ーーー
・・・省略・・・・
If limit is zero then the pattern will be applied as many times as possible,
the array can have any length, and trailing empty strings will be discarded.
ーーー
最後の空文字を無視しないようにするためには、splitメソッドのオーバーロードを利用します。
String target = "1,2,3,4,5,,,,,"; String[] list = target.split(",",-1); //負の値であればよいらしい。 System.out.println(list.length); //10
これで思い通りの挙動になりました(´・ω・`)
…なお、limitを省略したsplitメソッドの呼び出しは、limit=0を指定したときと同じ処理になるそうです。
まとめ
初めてのものは、とりあえず取扱説明書をよむべし(/・ω・)/