12

opencsv を使用して csv ファイルを読み取っているときに、文字列の末尾に「\」があると正しく機能しません。必要に応じて「\」ではなく、文字列の " 部分を作成します。別の「\」を追加して、代わりに「\」文字をエスケープさせる方法が必要だと思いますか?手動で編集する必要はありませんcsv ファイルを検索しましたが、何も見つかりませんでした。

私の問題を明確にするために、次のようになります。

csvファイル

"A",       "B",        "C",       "D"
"value 1", "value 2",  "value 3", "value 4"
"value 5", "value 6\", "value 7", "value 8"

私のコードは次のようになります(実際にはそうではありませんが、私の問題を示しています):

String inFile = "in.csv";
CSVReader reader = new CSVReader(new FileReader(inFile));
String[] line;

while ((line = reader.readNext()) != null) {
    for (int i = 0; i < line.length(); i++) {
        System.out.println(i + " " + line[i]);
    }
}

これを、行ごとにそれぞれ 4 つの要素を持つ String[] に解析したいのですが、次の出力に示すように、最後の行は 2 つの要素にしか解析されません。

1 A
2 B
3 C
4 D
1 value 1
2 value 2
3 value 3
4 value 4
1 value 5
2 value 6",value 7,value 8

リーダーを次のように変更しようとしました。

CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8"));

しかし運がない。

4

3 に答える 3

14

たぶん、リーダーのコンストラクターでエスケープ文字を変更しますか?

CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|') 

|これは、CSVファイルで使用されていないことを前提としています

于 2013-02-11T19:50:46.330 に答える
3

"一部の値には文字が含まれている可能性があり"、バックスラッシュがないと文字を含めることができないため、バックスラッシュはエスケープするためのものです。

したがって、使用したい場合は、通常の Java String で使用\する場合と同様に、エスケープする必要があります。\

"A",       "B",         "C",       "D"
"value 1", "value 2",   "value 3", "value 4"
"value 5", "value 6\\", "value 7", "value 8"

CSV ファイルを変更するか、エスケープ文字を選択できるCSVReaderの別のコンストラクターを使用します。

于 2013-02-11T19:47:15.553 に答える