当前位置: 首页 > 知识库问答 >
问题:

JAVA中的Opencsv解析器,无法解析数据中的双引号

李疏珂
2023-03-14

我有以下csv文件

"id","Description","vale"
1,New"Account","val1"

我无法用opencsv jar读取上述csv文件。它无法读取New”帐户,因为数据中有双引号。我的csv阅读器构造函数如下所示:,

csvReader = new CSVReader(new FileReader(currentFile), ',', '\"', '\0');

共有2个答案

禹正阳
2023-03-14

这是设计好的。构造函数将引号字符指定为“\”,因此OpenCSV会将该字符视为引号字符,即当它读取引号时,会忽略所有逗号,直到找到匹配的引号。

要解决这个问题,你可以使用FilterReader

    Reader reader = new FilterReader(fileReader) {

        private int filter(int ch) {
            return ch == '"'?' ':ch;
        }
        @Override
        public int read(char[] cbuf, int off, int len) throws IOException {
            int red = super.read(cbuf, off, len);
            for ( int i = off; i < off + red; i++) {
                cbuf[i] = (char)filter(cbuf[i]);
            }
            return red;
        }

        @Override
        public int read() throws IOException {
            return filter(super.read());
        }

    };
澹台季萌
2023-03-14

这是无效的csv:

1,新的“账户”,“val1”

应该是:

1、“新”账户、“val1”-

1、“新建”“帐户”“”、“val1”-

(引用的)字段中的引号,必须用另一个引号转义。

虽然您可以更改代码以正确读取格式错误的csv,但csv数据首先应该得到修复,因为如果csv文件较大或数据更新,可能会出现更多错误。

通常,当字段中有分隔符或其他引号时,使用引号。因此,如果您忽略引号,只在分隔符上拆分,那么在未来的数据更新中,如果字段中有分隔符,就会出现问题,例如:

1,"John, Doe",123
 类似资料:
  • 我正在尝试使用opencsv(3.10版)解析一些公共数据。以下是获取CSV并将记录映射到POJO列表的代码片段: 解析列表中的记录比CSV中的少。查看数据,我注意到单元格值中有时会有双引号。这是一个例子: “36”以下的组块导致后续记录与描述一致。通过IDE查看时,这一点更为明显: 你能看出我做错了什么吗?我怀疑有一个简单的解决方案,因为Excel正确解析了它,而opencsv似乎是Java C

  • 我正在通过自定义语法处理输入文件,提取标记,并在中返回它们。在ANTLR 3中,我能够通过调用解析器上的方法来解析文件,并获得类似于。 这在ANTLR 4中似乎不起作用。我参考了这本书,似乎我必须调用开始解析,但我在解析器中没有看到任何方法。 我使用ANTLRWorks 2生成我的词法分析器和解析器文件。我没有生成侦听器类。

  • 我正在尝试使用OpenCSV解析CSV文件。其中一列以YAML序列化格式存储数据,并被引用,因为其中可以包含逗号。它里面也有引号,所以它通过放两个引号来转义。我能够在Ruby中轻松解析这个文件,但使用OpenCSV我无法完全解析它。这是一个UTF-8编码的文件。 这是我的Java片段,它试图读取文件 这是此文件中的2行。第一行没有被正确解析,并且在处被拆分,因为我猜是转义双引号。

  • 样本数据- Header1,full_name,header3,header4 > 20,“Bob,XXX”,“Test”,30 20,“Evan”s,YYY“,”Test“,30 20,“Tom,ZZZ”,“Test”,30 第二行读起来不像预期的那样。因为full_name列值中有一个双引号。 我想忽略这类案件。任何建议都将不胜感激。 使用openCSV Java api进行解析。 编辑: 我

  • 我正在尝试使用OpenCsv从CSV解析即时,如下所示: 我知道OpenCsv应该支持< code>java.time。 但是当我试图使用它的时候,我得到了下面的异常: 分析CSV行时出错:8。 ... 原因:java.time.format。DateTimeParseException:无法解析文本“2022-04-21 00:00:00”:无法从临时加速器获取即时数据:{HourOfAmPm=

  • 本文向大家介绍Java中Json解析的方法分析,包括了Java中Json解析的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中Json解析的方法。分享给大家供大家参考,具体如下: 首先准备一个JSON格式的字符串 下面是一个Json解析的程序代码 PS:关于json操作,这里再为大家推荐几款比较实用的json在线工具供大家参考使用: 在线JSON代码检验、检验、美化、格式