1

CSV ファイルの内容は で各行が区切られていることがわかっているので\r\n、各行を簡単に取得できます。次のようなコード:

scanner.useDelimiter("\r\n"); 
while(scanner.hasNext()){
    scanner.next();
}

しかし、CSV ファイルのフィールドに "\r\n" が含まれていると、このコードは機能しません。ここのCSVのように:

Row1: "abc\r\nabc","abc","abc"
Row2: "efg", "efg", "efg"
Row3: "hjk", "hjk"

スキャナーを使用して次のように読み取りたいと思います。

"abc\r\nabc","abc","abc"
"efg", "efg", "efg"
"hjk", "hjk"

しかし、単に を使用する\r\nと、次のようになります:</p>

“abc
abc","abc","abc"
"efg", "efg", "efg"
"hjk", "hjk"

どのような変更を行う必要がありますか? scanner.useDelimiter("\r\n")パターンを実行可能にするために変更する方法は?

4

3 に答える 3

1

独自のソリューションを開発するのは常に魅力的ですが、CSV ライブラリの使用がはるかに簡単になるのは、埋め込まれた改行などの問題です。

Super CSVは、埋め込まれた改行 ( RFC4180 - CSV の MIME タイプ定義に準拠) だけでなく、埋め込まれた引用符と区切り文字 (すべて構成可能) にも対応しています。リスト、マップ、または POJO に読み込むことができるだけでなく、データを変換または検証するプロセッサを定義でき、何か問題が発生したときに、より多くの情報 (行番号、行番号、列番号、等)。

私たち (Super CSV チーム) は新しいバージョンをリリースしました。これは、多くの改善とバグ修正、および Dozer を使用して CSV ファイルと POJO 間をマッピングする強力な新しい拡張機能をもたらします。

SourceForge または Mavenからダウンロードできます。

于 2012-09-19T22:23:43.663 に答える
1

まず、既存の CSV 解析ライブラリを調査することをお勧めします。行を終了する同じ文字を含め、フィールド区切り記号 ( )の間に存在するものすべてに対処する非常に良い仕事をしてくれると思います。""関連する質問を参照してください: CSV API for Java .

それができない場合は、この SO の質問に示されているソリューションを実装しようとします: Java: splitting a comma-separated string but ignoring commas in quotes

于 2012-09-09T20:15:35.537 に答える
0

区切り文字を試すことができます:

 "\"\r\n\""

これは、各行が「」で始まり、「」で終わる場合に機能するはずです。ただし、文字列の1つに改行だけが含まれていると壊れます。

于 2012-09-09T20:16:36.553 に答える