ひでっぷの技術メモ

はてなダイアリーから移行しました

Stringクラスのsplitメソッド

ある文字列を指定文字や正規表現で分けたい場合に重宝するのがStringクラスのsplitメソッド。
ただ、ちょっと落とし穴があります。


String string = "hoge\rhoge\rhoge\r\r\r";
String strings = string.split("\r");
stringsの中身は
"hoge"
"hoge"
"hoge"
で配列数は3。

自分はずっと5だと思ってました。後ろの空文字は省かれてしまいます。
これを回避するためにはsplit(String regex)ではなくsplit(String regex,int limit)を使います。
limitは適用回数です。2にすれば1度だけ適用するので

String string = "hoge\rhoge\rhoge\r\r\r";
String strings = string.split("\r",2);
stringsの中身は
"hoge"
"hoge\rhoge\rhoge\r\r\r"
で配列数は2。

limitが0だとパターンの適用回数と配列の長さは制限されませんが、後続の空の文字列は破棄されるようです。
limitが負の値の場合、このパターンの適用回数と配列の長さは制限されませんので

String string = "hoge\rhoge\rhoge\r\r\r";
String[] strings = string.split("\r",-1);
stringsの中身は
"hoge"
"hoge"
"hoge"
""
""
で配列数は5。

となります。

Twitterのフォロワーさんに教えていただきました。ありがとうございました。
Sun MicroSystems StringクラスのJavaDoc