我有一个CSV文件,其中将有分隔符或未关闭的引号内的引号,我如何使CSVReader忽略引号和分隔符内的引号。举例来说:
123|Bhajji|Maga|39|"I said Hey|" I am "5|'10."|"I a do "you"|get that"
这是文件的内容。
下面的程序读取csv文件。
@Test
public void readFromCsv() throws IOException {
FileInputStream fis = new FileInputStream(
"/home/netspurt/awesomefile.csv");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
CSVReader reader = new CSVReader(isr, '|', '\"');
for (String[] row; (row = reader.readNext()) != null;) {
System.out.println(Arrays.toString(row));
}
reader.close();
isr.close();
fis.close();
}
我得到了这样的o/p。
[123, Bhajji, Maga, 39, I said Hey| I am "5|'10., I am an idiot do "you|get that]
you
后的报价发生了什么
编辑:Opencsv依赖项com.opencsv opencsv 3.4
5条答案
按热度按时间nkcskrwz1#
从com.opencsv:opencsv的源代码:
参见http://sourceforge.net/p/opencsv/source/ci/master/tree/src/main/java/com/opencsv/CSVReader.java
有一个构造函数,带有一个额外的参数escape,允许转义分隔符和引号(根据javadoc)。
whlutmcx2#
由于CSV格式指定了引号(“),如果它在一个字段中,我们需要在它前面加上另一个引号(“)。所以这解决了我的问题。
参考:https://www.ietf.org/rfc/rfc4180.txt
t1qtbnec3#
对不起,但我没有足够的代表添加评论,所以我将不得不添加一个答案。
对于你最初的问题,你后面的引用发生了什么,答案与I之前的引用发生了什么相同。
对于CSV数据,分隔符前后的引号是字段数据的开始和结束,因此将被删除。这就是为什么这两个引号不见了。
nue99wik4#
不确定这在八年前是否可用,但OpenCSV有一个
ignoreQuotations
的选项。bxjv4tth5#
您需要转义出作为字段一部分的引号。默认转义字符是
猜测要转义字符串的引号应该如下所示