java - Apache 共享 CSV : Read Values with comma

标签 java csv opencsv

我正在将 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、ProvinceX、TownX、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"

regionName = "XI"

provinceName = "ProvinceX"

municipalityName = "TownX"

districtName = "BRGX"

votingCenter = "SCHOOL, BRGX"

precint = "0054A,0055A,0055B,0055C"

然而实际输出是这样的

precintCode = "7080001"

regionName = "XI"

provinceName = "ProvinceX"

municipalityName = "TownX"

districtName = "BRGX"

votingCenter = ""SCHOOL"

precint = " , 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"

关于java - Apache 共享 CSV : Read Values with comma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36129598/

相关文章:

java - 如何用 JMenu 替换 JMenuItem(无需重新排序)

java - Java中如何将字符串从一个方法传递到另一个方法

java - 如何使 Spring 将值注入(inject)静态字段

python - 将列表字典写入 CSV 文件

java - 包 'au.com.bytecode' 不存在 (OpenCSV)

java - 将 csv 中写入的行数与结果集行数进行比较

java - Java中使用ArrayList进行对象序列化和反序列化

sql-server - 在将 python 3.5 与 pandas 和 sqlalchemy 一起使用时,尝试从 csv 文件在 SQL Server 2016 中创建新数据库表时出错

windows - 使用命令行 Windows 在 csv 文件中插入 header

java:openCSV 未在递归循环中写入文件?