当我使用opencsv读取csv文件时,在字符串末尾遇到'\'时它无法正常工作。它使“字符串的一部分,而不是我想要的'\'。我想必须有一些方法来添加另一个'\'让它逃脱'\' - 字符而不是?没有< / em>必须手动编辑csv文件。我已搜索但未找到任何内容。
为了澄清我的问题,它看起来像这样:
csv-file
"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"));
但没有任何运气。
答案 0 :(得分:14)
也许更改Reader的构造函数中的转义字符?
CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|')
这是假设您的CSV文件中未使用|
答案 1 :(得分:3)
反斜杠用于转义"
,因为某些值可能包含"
字符,如果没有反斜杠,则无法包含该字符。
因此,如果你想使用\
,你需要使用\
来转义它,就像你在常规Java字符串中使用它一样。
"A", "B", "C", "D"
"value 1", "value 2", "value 3", "value 4"
"value 5", "value 6\\", "value 7", "value 8"
您可以修改CSV文件,也可以使用CSVReader中的其他构造函数,您可以从中选择转义字符
答案 2 :(得分:1)
更清洁和推荐的解决方案是使用RFC4180Parser
而不是默认CSVParser
:
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader csvReader = new CSVReaderBuilder(new StringReader(writer.toString())).withCSVParser(rfc4180Parser).build();