1

私は少し混乱しています

 public static void main(String [] args){
        String s = "a,b,c,d,";

        System.out.println(s.split(",").length);
    }

出力として 5 が表示されることを期待していましたが、出力は 4 ですか? 最後の「null」フィールドを無視するのはなぜですか

(たとえば) 5 つの列を持つデータを解析しようとしている場合、このケースをどのように処理すればよいでしょうか。

cases:
a,b,c,d,e
a,,c,d,e //this case is fine as this still has 5 fields.. one of the field is missing.. but thats ok
a,b,c,d //simple length check with header catches this error
a,b,c,d,e,f //simple length check
a,b,c,d,e,// looks like there are 6 fields.. but unable to catch such error by length check
4

1 に答える 1

8

String#split()メソッドは、末尾の空の文字列を無視します。したがって、それらは配列の一部ではありません。それらを配列の一部にしたい場合は、split(String, int)2 番目の引数として制限を取るオーバーロードされたメソッドを使用します。制限に負の値を渡すと、末尾の空の文字列は無視されません。

System.out.println(s.split(",", -1).length);

また、空の文字列は ではありませんnull

于 2013-09-28T21:04:37.603 に答える