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[],但最后一行仅解析为两个元素,如下面的输出所示。

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 回答
6

更清洁和推荐的解决方案是使用RFC4180Parser而不是 default CSVParser

String csv = "come,csv,string";
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader csvReader = new CSVReaderBuilder(new StringReader(csv)).withCSVParser(rfc4180Parser).build(); 

参考:https ://sourceforge.net/p/opencsv/support-requests/50/

于 2017-09-16T18:45:57.363 回答
3

反斜杠用于转义,"因为某些值可能包含"字符,如果没有反斜杠,您将无法包含该字符。

因此,如果您想使用\它,您也需要将其转义\,就像您将它放在常规 Java 字符串中一样。

"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 回答