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