web-dev-qa-db-ja.com

Java split()メソッドは最後に空の文字列を削除しますか?

以下のプログラムをご覧ください。

try {
    for (String data : Files.readAllLines(Paths.get("D:/sample.txt"))){
        String[] de = data.split(";");
        System.out.println("Length = " + de.length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Sample.txt:

 1; 2; 3; 4 
 A; B ;; 
 a; b; c; 

出力:

長さ= 4 
長さ= 2 
長さ= 3 

2番目と3番目の出力が4ではなく2と3を与える理由sample.txtファイルでは、2番目と3番目の行の条件は、3番目のフィールドに区切り文字を与えた直後にnewline(\nまたはenter)を与える必要があります。 sample.txtファイルの条件を変更せずに2行目と3行目の長さを4にする方法と、de[2]の値を出力する方法(ArrayIndexOutOfBoundsExceptionをスロー)を手伝ってくれませんか?

112
raja

次の方法で、できるだけ頻繁にパターンを適用するように指定できます。

String[] de = data.split(";", -1);

Javadocを参照 詳細については、2つの引数を取るsplitメソッドについて。

280
Fabian Steeg

docs 、ここで重要な引用を見てください:

[...] the array can have any length, and trailing empty strings will be discarded.

気に入らない場合は、ファビアンのコメントをご覧ください。 String.split(String)を呼び出すと、String.split(String, 0)が呼び出され、末尾の空の文字列が破棄されます(ドキュメントに記載されているとおり)。String.split(String, n)n < 0で呼び出すと、何も破棄されません。

23
Johannes Weiss