1

この形式でデータを受信して​​います。これらの3行はそれぞれ、独自の文字列です。

   0 -rw-------    1       167 Tue Nov 13 10:39:28 2012 .bash_history
   0 -rw-r--r--    1        40 Wed Nov 28 12:18:03 2012 aaa.txt
22290 -rw-r--r--    1  22824944 Tue Jan 15 15:05:58 2013 a.bin

この正規表現を使用して、空白で区切られたトークンに分割してみました。

String[] tokens = newParts[i].split("\\s{1,}");

ただし、これは常に最初のトークンを最初の2行の空の文字列として作成し、22290を3行目の最初のトークンとして正しく設定します。どうしてこれなの?残りのトークンはすべて私が望む通りです。最初の2行の最初の行ではないのはなぜですか?

4

2 に答える 2

1

文字列を分割する前に、.trim() を実行して先頭と末尾の空白を削除できます。これにより、不要な余分なトークンを防ぐことができます。

于 2013-02-05T12:52:35.253 に答える
1

Pattern.splitドキュメントを引用するには:

このメソッドによって返される配列には、このパターンに一致する別のサブシーケンスで終了するか、入力シーケンスの最後で終了する入力シーケンスの各部分文字列が含まれます。

したがって、文字列がセパレーターで始まる場合、最初の要素は空の文字列になります。同様に、文字列がセパレーターで終わる場合、最後の要素は空の文字列になります。

編集:実際には、後続の空の要素を明示的に破棄する をsplit(string)呼び出します。split(string, 0)ただし、空の開始要素については何もしません。

trim()最初に入力を呼び出すと、期待どおりに機能するはずです。

于 2013-02-05T12:54:18.190 に答える