2017-03-19 20 views
3
System.out.println(",".split(",", 0).length); 
System.out.println("".split(",", 0).length); 

プリントを破棄しないことにより、ドキュメントに違反しているようだ:分割は、Javaで空の文字列は、末尾の空の文字列に

これは奇妙に思えます。 nはゼロ、パターンが可能な回数として適用される場合String.split(pattern, n)

のマニュアルによれば、アレイは、任意の長さを有することができ、末尾の空の文字列はに廃棄されます。

2番目のケースでは、空の文字列を分割するとき、このルールは無視されるようです。これは予想される動作ですか? resulting array has just one element, namely this string

"".split(",", 0).length式は、入力のどの部分と一致しない場合

ドキュメントからも

+0

が、ここでは '」1

別の例として、配列の長さになります".split("、 ")'何も分割しなかったので、元の文字列 '[" "]'を含む配列が得られます。その長さは '1'です。 – Pshemo

+0

もう一つの興味深いケースは '' ".split(" ")'です。結果配列も '[" "]'で、その長さは '1'です。 '' ".split(anything)'は常に '[" "]'を返すことを覚えておく価値があります。 – Pshemo

答えて

4

は、この

System.out.println(new String[]{""}.length); 

に似ている意味がありました文字列""には,が含まれていないので、配列c単一の要素""空の文字列ontain、これらの空の文字列を分割*の結果として作成された陶器場合にのみ意味*になり、空の文字列の末尾の削除

System.out.println("aaa".split(",", 0).length); // 1 
    System.out.println("aaa".split("," , 0)[0]); // aaa 
+0

私は同意します:2番目の例では、空白の入力文字列しかありません。入力に区切り文字がないので、後続の**空白文字列はありません。 – TmTron

関連する問題