0

行ごとに取得する必要があるテキスト ファイルがあります。

行ごとに、文字列を切り取ってテーブルに配置する必要があります。

私の区切りはスペースです。

文字列の例:

22/03/2013 00h00    9940    10200    10260    10190    10030    10060

結果の例:

[22/03/2013 00h00,  9940, 10200, 10260, 10190, 10030, 10060]

私の問題は、私のファイルでは、セパレーターが行ごとに異なることです

例:

22/03/2013 00h00 9940    10200    10260    10190    10030    10060
22/03/2013 01h00    9970 9900    9970    9850 9830    9740 
22/03/2013 02h00      9630      9750      10010      10100    10040    10010

どうすれば弦を切ることができますか?

4

3 に答える 3

2

正規表現String.split()を取ることを忘れないでください。次のように、複数の空白で分割できます。

myString.split("\\s+");

これは、任意の空白文字 (スペース、タブなど) を表す文字クラスを使用します。 \s

スペースに関してデータ行がどの程度適切に定義されているかは明確ではありません。あなたの最善の策は、上記のように空白で分割し、最初の2 つの要素を取得して日付/時刻として処理することです。例えば

String[] results = myString.split("\\s+");
String datetime = results[0] + " " + results[1];

(存在する結果要素のチェックなど)

于 2013-07-17T13:50:32.973 に答える
1

この正規表現を試すことができます

str.split("(?<!/\\d{4}) +");
于 2013-07-17T13:51:50.443 に答える
0

次のようなものがうまくいくはずです:

String str = "22/03/2013 00h00 9940    10200    10260    10190    10030    10060 " +
    "22/03/2013 01h00    9970 9900    9970    9850 9830    9740 " + 
    "22/03/2013 02h00      9630      9750      10010      10100    10040    10010";

// split string into individual records
String[] rows = str.split("\\s+(?=\\d{2}/\\d{2}/\\d{4} )");

// now split each row into columns (combine first 2 columns into 1)
for (String r: rows)
    System.out.println(Arrays.toString(r.split("(?<!\\d{2}/\\d{2}/\\d{4})\\s+")));

出力:

[22/03/2013 00h00, 9940, 10200, 10260, 10190, 10030, 10060]
[22/03/2013 01h00, 9970, 9900, 9970, 9850, 9830, 9740]
[22/03/2013 02h00, 9630, 9750, 10010, 10100, 10040, 10010]

説明: nn/nn/nnnn 形式の日付が後に続く場合、1 つ以上のスペース/改行文字で分割される最初の正規表現\\d{2}/\\d{2}/\\d{4}

2番目の正規表現は、同じ形式の日付が前にない場合、列を1つ以上のスペース/改行文字で分割することで、日付の後の最初のスペースを無視します。

于 2013-07-17T13:59:27.717 に答える