文字列と正規表現の区別がつかない Java はウンコだと思います。
// unko
String[] unko = "a.b.c.d.e".split(".");
System.out.print(unko.length); //=> 0
// kuso
String[] kuso = "a.b.c.d.e".split("\\.");
System.out.print(kuso.length); //=> 5
なんというか、投稿者さんが区別の仕方を知らないだけでしょう。 ちなみに、これJavaに限らず、文字列で正規表現を表現するすべての処理系に対する宣戦布告になってませんか?
文字列としての「.」と正規表現演算子としての「.」を1つの正規表現の中で同時に使いたい場合は、どうやって書き分けたら良いと思ってるんだろう投稿者さんは。
Java には Pattern という正規表現オブジェクトがあります。
本来正規表現を要求するなら split は Pattern オブジェクトのインスタンスを要求すべきではないでしょうか。
String.split は String で正規表現を要求する事により非正規表現文字列での split の機能を失っています。
それによってウンコなコードしか書けなくなってると言いたかったのです。
ドキュメントを読めばわかると言ってる人はコメントさえ書けばソースの可読性なんてどうでもいいと言ってるのとかわらないのではないでしょうか。
split(String) と要求してるのに実際は正規表現を求めているのであれば splitRegex(String) 等メソッド名で機能要件がわかるようにてほしいところです。
他の人のコメントちゃんと読んでる ? 文字としての "." と正規表現演算子としての "." の区別はどうすればいいかくらいわかってるよね ? それがわかってるんならこの投稿は Java を dis ってるとしか言えない(実際そうっぽいけど)。私だって Java にケチ付けたいことはいくらでもあるが、Java で書けと言われたら Java の作法に従うしかないと思ってる。嫌なら Java じゃなくて違う言語使えばいいだけの話じゃ ?
naobotさん、言いたいことに一理あるのは分かった。なら、最初からそう伝わるように文章を練ろうよ。
シグニチャだけで言えばString#split(String)だけど、引数名で言えばregularExpressionとか名前が付いてるので、IDE使っている限りは十分に理解できるんじゃないかな。秀丸で書いてるとかなら別だけど。 オーバーロードがあるんだから、Patternを引数とするメソッドがあってもいいと思うんだけど、それこそPattern#splitがあるから冗長なんだよね。 ちなみに特定の文字列でsplitするようなメソッドが、昔からStringには存在しなかったよ。
そもそもセパレータに”.”要求する仕様からしてウンコとか言うのは論点が違うか…
引数に正規表現だって書いてあるじゃん。