JavaのString.split(”,”)は、split(”,”, -1)にしたほうがいい
知ってる人にとっては何をいまさらって感じなんでしょうけど、はまってしまいました。
JavaのString.splitは、limit引数をつけないと、最後の空文字をとります。
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String,%20int)
new String("a,b,c,,,").split(",")
の結果は、
{"a", "b", "c"}
{"a", "b", "c", "", "", ""}
を取るには、以下のように、-1をつける必要があります。
new String("a,b,c,,,").split("," , -1)
APIドキュメントには、-2とかいう変な数値で例がありますが、基本的に-1でも-2でも負の数値なら同じ。最初に読んだときは意味がわからず、華麗にスルーしてしまったので、こんな羽目になりました。
ドキュメント読めっていうのは当然ですが、この仕様はひどい。perlとかから持ってきたんでしょうかね。
ちなみに、他の言語で "a,b,c,,,".split()すると、こんな感じでした。個人的には、python大好きだし、隠れた仕様がないpythonが一番いいと思うんですが、もしかして、後ろの空文字を期待する自分が変なんでしょうか?
python : ["a", "b", "c", "", "", ""]
perl : ["a", "b", "c"]
ruby : ["a", "b", "c"]