1. ホーム
  2. java

[解決済み] Java: 文字列のsplit()。末尾に空文字列を含むようにしたい [重複].

2023-07-05 09:33:22

質問

以下のようなStringがあります。

String str = "\nHERE\n\nTHERE\n\nEVERYWHERE\n\n";

これをそのまま出力すると、このようになります。 \n は印刷されません)。

\n
HERE\n
\n
THERE\n
\n
EVERYWHERE\n
\n
\n

メソッドを呼び出すと split("\n") を呼び出すと、改行の間にあるすべての文字列を取得したい ( \n の間の文字列を取得したい。

例えば、今日こうしたら

String strArray[] = str.split("\n");

System.out.println("strArray.length - " + strArray.length);
for(int i = 0; i < strArray.length; i++)
    System.out.println("strArray[" + i + "] - \"" + strArray[i] + "\"");

このように出力してほしい(出力A)。

strArray.length - 8
strArray[0] - ""
strArray[1] - "HERE"
strArray[2] - ""
strArray[3] - "THERE"
strArray[4] - ""
strArray[5] - "EVERYWHERE"
strArray[6] - ""
strArray[7] - ""

現在、このように印刷され(出力B)、末尾の空文字列はスキップされます。

strArray.length - 6
strArray[0] - ""
strArray[1] - "HERE"
strArray[2] - ""
strArray[3] - "THERE"
strArray[4] - ""
strArray[5] - "EVERYWHERE"

どのようにすれば split() メソッドに出力Aのような空の文字列を含ませるにはどうしたらよいでしょうか?もちろん、複数行のコードを書くこともできますが、それを実装しようとして時間を浪費する前に、簡単な方法または2行程度の追加コードがあれば知りたかったのです。ありがとうございます!

どのように解決するのですか?

使用 str.split("\n", -1) (負の limit の引数)。このとき split がゼロかゼロでない場合 limit を指定すると、末尾の空のフィールドを破棄し、 正の limit 引数が与えられると、フィールドの数をその数に制限します。 負の は、任意の数のフィールドを許可し、末尾の空フィールドを破棄しないことを意味します。これは、文書化された はこちら で、動作はPerlから引用されています。