java - 读取分号分隔的 csv

标签 java csv opencsv

我有下面的代码块,它使用 OpenCSV 读取 CSV 文件并存储第 7 列。我面临的问题是我在 CSV 文件中使用 ; 作为分隔符,但它也使用 , 作为分隔符。我怎样才能避免这种情况?

将“”放入 CSV 是不可能的,因为我们从客户端获得了一个不可编辑的文件。

        CSVReader reader = null;
    String[] nextCsvLine = new String[50];
    String splitBy = ";";

    int count = 0;

    try {
        StringReader sr = new StringReader(new String(in, offset, len));
        reader = new CSVReader(sr);

        while ((nextCsvLine = reader.readNext()) != null) {
            for (String linewithsemicolon : nextCsvLine) {
                log.debug("Line read : "+linewithsemicolon);
                String[] b = linewithsemicolon.split(splitBy);
                if (count==0){
                    count++;
                    continue;
                }
                else    {      
                    detailItems.add(b[7]);
                    log.debug("7th position: "+b[7]);
                    count++;
                }                   
            }

最佳答案

使用分隔符为 OpenCSV 的重载版本

CSVReader(reader, ';')

更新(感谢@Matt)-更好地使用:

CSVReaderBuilder(reader)
    .withCSVParser(new CSVParserBuilder()
        .withSeparator(';')
        .build()
    ).build()

我认为计数有点不对:

try (CSVReader reader = new CSVReader(sr, ';')) {
    String[] nextCsvLine;
    while ((nextCsvLine = reader.readNext()) != null) {
        int count = 0;
        for (String field: nextCsvLine) {
            log.debug("Line read : "+linewithsemicolon);
            if (count == 6) { // 7th column
                detailItems.add(field);
                log.debug("7th position: " + field);
            }                   
            count++;
        }
    }

而不是你可以做的 for 循环:

         if (nextCsvLine.length > 6) {
             detailItems.add(nextCsvLine[6]);
         }

第七个字段的索引应为 6。

关于java - 读取分号分隔的 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46845781/

相关文章:

java - 项目缺少所需的库 : 'forms-1.3.0.jar' and 'miglayout15-swing.jar'

java - 相机目录为空

sql-server - 将 CSV 导入 SQl Server 2005 的最简单方法

java - OpenCSV:将嵌套 Bean 映射到 CSV 文件

Java 堆大小和内存不足

java - 使用gradle从spring boot 1.5.3构建可执行文件.jar

python - 我的 csv 中有多个列。如何使用 python 将行值与引用列匹配?

sql - 批量加载数据转换错误(截断)

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

java - java中sum方法的使用方法