2017-06-07 16 views
0

私はCSVを持っていますString.splitメソッドを使用して解析しようとしています。私は、区切りをコンマで区切って、新しい区切りにしたい。私はこれを行うために使用しているコードの行は次のとおりです。Java文字列分割最後の文字を省略します

String [] orderData = content.trim().split(",|\\r?\\n", -2); 

を何らかの理由で、これはCSV内の最後の要素を省略します...私はなぜ絶対にないアイデアを持っていません。ここでは、CSVファイルの最後の行の例です:非常に最後の文字が改行文字

であることを

9055,6001384541,6001384541000222,15/05/2017,Collected,15/05/2017,23/05/2017,,,9044,4234528,204732,,45678 

注任意のアイデア?

+0

あなたが入力、出力の例を共有することができますしてください? –

+0

私はあなたが何を意味するのかよく分かりませんが、ファイル内の最後の行の例を示します: 9055,6001384541,6001384541000222,15/05/2017、収集済み、15/05/2017,23/05/2017 ,,,,, 9044,4234528,204732、、45678 最後に改行文字があります(ファイルの最後の文字は改行です) –

+1

JavaでCSVデータを取り扱っているのは初めてです、あなたのためにこれを扱うことができる十分なクラスがあります。そしてそれらはおそらく「エスケープ文字」を認識するという追加のボーナスを持つでしょう。コンマを含む値を持つ列がある場合、そのような状況では "ソリューション"が失敗することになります。だから私はあなたが車輪を再発明しようとしないことを強くお勧めします。 – CBroe

答えて

0

重複する質問ではありません。

以下、この質問を示すコードです。 区切り文字がEOFの場合、文字列の最後の空白の値、空白、タブは分割されません。

public void stringSplitTest() { 

    process("1,2\n3,4\n"); 
    process("1,2\n\n3,4\n\n"); 
    process("1,2\n \n3,4\n \n"); 
    process("1,2\n\t\n3,4\n\t\n"); 
    process("1,2\n\t\n3,4,"); 
} 

private void process(String content) { 
    String pattern = ",|\r?\n"; 
    System.out.print("\ninitial: " + 
      content.replaceAll("\r","\\\\r") 
        .replaceAll("\n","\\\\n") 
        .replaceAll("\t","\\\\t") 
        .replaceAll(" ","< >")); 
    String [] splittedData = content.trim().split(pattern, -10); 
    System.out.print(String.format("\nresult(%s): %s\n", 
      splittedData.length, Arrays.toString(splittedData))); 
} 

出力:

initial: 1,2\n3,4\n 
result(4): [1, 2, 3, 4] 

initial: 1,2\n\n3,4\n\n 
result(5): [1, 2, , 3, 4] 

initial: 1,2\n< >\n3,4\n< >\n 
result(5): [1, 2, , 3, 4] 

initial: 1,2\n\t\n3,4\n\t\n 
result(5): [1, 2, , 3, 4] 

initial: 1,2\n\t\n3,4, 
result(6): [1, 2, , 3, 4, ] 
関連する問題