使用apache commons csv读取csv文件时跳过双引号

时间:2016-06-14 05:26:14

标签: java csv apache-commons-csv

Reader in = new FileReader(dataFile);
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().withIgnoreEmptyLines(true).withTrim().parse(in);

        // Reads the data in csv file until last row is encountered
        for (CSVRecord record : records) {

            String column1= record.get("column1");

这里csv文件中的column1值类似于&#34; 1234557。所以当我读到列时,它会在开头用引号读取。在Apache commons csv中有没有办法跳过这些。

来自csv档案的样本数据:&#34;&#34;&#34; 0996108562&#34;,&#34;&#34;&#34; 204979956&#34;

2 个答案:

答案 0 :(得分:2)

无法使用{MCER(Minimal, Complete, and Verifiable examplecommons-csv-1.4.jar使用String input = "column1,column2\r\n" + "1,Foo\r\n" + "\"2\",\"Bar\"\r\n"; CSVFormat csvFormat = CSVFormat.RFC4180.withFirstRecordAsHeader() .withIgnoreEmptyLines(true) .withTrim(); try (CSVParser records = csvFormat.parse(new StringReader(input))) { for (CSVRecord record : records) { String column1 = record.get("column1"); String column2 = record.get("column2"); System.out.println(column1 + ": "+ column2); } } 进行复制:

1: Foo
2: Bar

输出:

"2"

"Bar" <add name="oraclebldb" connectionString="DataSource=SKM.SMEBANK.ORG;Persist Security Info=True;User ID=bldb;Password=bldb;Unicode=True" providerName="System.Data.OracleClient"/> <add name="OraConnectionString" connectionString="Data Source=skm;Persist Security Info=True;User ID=bldb;Password=bldb;Unicode=True" providerName="System.Data.OracleClient"/> 周围的引号已被删除。

答案 1 :(得分:0)

如果我正确理解您的要求,您需要使用Apache的StringEscapeUtils中的unescapeCsv。正如医生所说:

  

如果值包含在双引号中,并且包含逗号,换行符&gt;&gt;或双引号,则会删除引号。

     

任何双引号转义字符(一对双引号)都不会转义为一个双引号。

     

如果该值未包含在双引号中,或者是否包含逗号,换行符或双引号,则返回String值不变。