正在阅读分号分隔的csv

fquxozlt  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(158)

我有下面的代码块使用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++;
                }                   
            }
ffvjumwh

ffvjumwh1#

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

CSVReader(reader, ';')

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

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

我认为count ing做得有点不对:

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。

相关问题