Apache Commons CSV:读取带逗号的值



我正在将CSV文件转换为Java Bean。我需要将逗号保留在包含在"中的值内。

这是我的代码。

public static PPRCV convertContestToObj(String fileName) throws IOException {
    PPRCV pprcvHandler = PPRCVFactory.getPPRCVTable(fileName);
    CSVFormat csvFileFormat = CSVFormat.DEFAULT.newFormat(',').withEscape('"');
    List<PPRCV> pprcvs = new ArrayList<>();
    FileReader fileReader = new FileReader(fileName);
    CSVParser csvFileParser = new CSVParser(fileReader, csvFileFormat);
    List<CSVRecord> csvRecords = csvFileParser.getRecords();
    for (CSVRecord csvRecord : csvRecords) {
        pprcvs.add(pprcvHandler.populateDynamicDetails(csvRecord));
    }
    return pprcvHandler;
}

示例 CSV 行:

7080001, XI, 省X, 镇X, BRGX,

"SHOOL, BRGX", "0054A,0055A,0055B,0055C"

我的 DTO

private String precintCode;
private String regionName;
private String provinceName;
private String municipalityName;
private String districtName;
private String votingCenter;
private String precint;

我的预期输出应该是

precintCode = "7080001"

区域名称 ="XI"

省名称 = "省X"

自治市名称 = "城镇X"

地区名称 = "BRGX"

投票中心 = "学校,BRGX"

辖区 = "0054A,0055A,0055B,0055C"

然而实际输出是这个

precintCode = "7080001"

区域名称 ="XI"

省名称 = "省X"

自治市名称 = "城镇X"

地区名称 = "BRGX"

投票中心 = "学校"

辖区 = " , BRGX,"0054A"

您需要在此处使用withIgnoreSurroundingSpaces()选项。所有其他设置可以保持DEFAULT

    final Reader in = new StringReader("7080001, XI, ProvinceX, TownX, BRGX, "SHOOL, BRGX", "0054A,0055A,0055B,0055C" ");
    final CSVFormat csvFileFormat = CSVFormat.DEFAULT.withIgnoreSurroundingSpaces();
    for (CSVRecord record: csvFileFormat.parse(in)) {
        for (String field: record) {
            System.out.println(""" + field + """);
        }
        System.out.println();
    }

输出为

"7080001"
"XI"
"ProvinceX"
"TownX"
"BRGX"
"SHOOL, BRGX"
"0054A,0055A,0055B,0055C"

我能够使用库中的withQuote函数来做到这一点。

CSVFormat.EXCEL.newFormat(',').withQuote('"')
您是否

已经尝试过使用CSVFormat.DEFAULT常量?--它适用于符合 RFC 4180 的 CSV 文件。

以下方法对我有用:

CSVFormat.EXCEL.withQuote('"')

相关内容

  • 没有找到相关文章

最新更新