Apache CSV 解析器:忽略空行的问题

米尼沙

如何忽略空行?我正在使用下面的代码片段,它不会忽略空行。CSV 解析器中是否有任何可用的指针配置来解决此问题?

 public CSVParser parseCSV(InputStream inputStream) {
        try {
            return new CSVParser(new InputStreamReader(inputStream, StandardCharsets.UTF_8), CSVFormat.DEFAULT
                    .withFirstRecordAsHeader()
                    .withIgnoreHeaderCase()
                    .withSkipHeaderRecord()
                    .withIgnoreEmptyLines()
                    .withTrim());
        } catch (IOException e) {
            throw new IPRSException(e);
        }
    }

示例文件

h1,h2,h3
d1,d2,d3
,,,

预期输出

d1,d2,d3
米尼沙

Apache CSV 解析器不支持开箱即用的空行,因此最终编写了自定义代码。

private boolean isEmpty(CSVRecord csvRecord){
        if (null == csvRecord) return true;
        for (int i = 0; i < csvRecord.size(); i++) {
            if (StringUtils.isNotBlank(csvRecord.get(i))) {
                return false;
            }
        }
        return true;
    }


    public List<Map<String, Object>> getMapFromCSV(InputStream inputStream) {
        try {
            CSVParser parser = parseCSV(inputStream);
            return getMap(parser.getRecords().stream()
                    .sequential().filter(v -> !isEmpty(v))
                    .collect(Collectors.toList()), parser.getHeaderMap());
        } catch (IOException e) {
            throw new Exception(e);
        }
    }

  private List<Map<String, Object>> getMap (List<CSVRecord> records, Map<String, Integer> headers) {
        Map<Integer, String> headerMap = formatHeaderMap(headers);
        List<Map<String, Object>> data = new ArrayList<>();
        for (int i = 1; i < records.size(); i++) {
            Map<String, Object> map = new HashMap<>();
            try {
                CSVRecord record = records.get(i);
                for (int j = 0; j < record.size(); j++) {
                    map.put(headerMap.get(j), record.get(j));
                }
                data.add(map);
            } catch (Exception e) {
                throw new Exception(e);
            }
        }
        return data;
    }


 private Map<Integer, String> formatHeaderMap(Map<String, Integer> map) {
        Map<Integer, String> data = new HashMap<>();
        map.forEach((k , v) -> data.put(v, inputSanitizerForUtf8(k)));
        return data;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有重复列标题的Apache CSV解析器

来自分类Dev

具有重复列标题的Apache CSV解析器

来自分类Dev

CSV 解析器文档

来自分类Dev

Apache模块命令解析器原型

来自分类Dev

解析器 CSV Php 保存 Json

来自分类Dev

在Apache Cordova App中读取和解析CSV文件

来自分类Dev

Apache NiFi:使用ExecuteScript处理器处理多个csv

来自分类Dev

真实世界的Haskell的CSV解析器实现

来自分类Dev

使用Lumenworks CSV解析器提取整个行/行

来自分类Dev

是否有适合iOS的CSV解析器?

来自分类Dev

如何使用opencsv编写java csv解析器

来自分类Dev

如何使用 Apache Commons CSV 解析以 GB18030 编码的 csv 文件

来自分类Dev

阅读时如何忽略CSV中的空行

来自分类Dev

Apache Commons CSV跳过行

来自分类Dev

Bindy-Apache骆驼。取消封送CSV时可以忽略位置(列)吗?

来自分类Dev

保存之前/之后由于CSV差异而导致的错误解析(带有Apache Commons CSV的Java)

来自分类Dev

CSV文件解析问题

来自分类Dev

CSV文件解析问题

来自分类Dev

如何在Python中使用CSV解析器解析字符串?

来自分类Dev

当解析器不是逗号时,如何使用d3解析CSV文件

来自分类Dev

使用Apache Spark和Java将CSV解析为DataFrame / DataSet

来自分类Dev

Python / Apache-Beam:如何将文本文件解析为CSV?

来自分类Dev

如何使用杰克逊CsvMapper或其他csv解析器解析CSV字符串中的列?

来自分类Dev

如何使用Apache Tika解析器从HTML提取标题,正文和图像

来自分类Dev

JSON 解析器的 Apache Spark 对象不可序列化异常

来自分类Dev

使用F#数据CSV类型提供程序与CSV解析器和阅读器之间的性能差异

来自分类Dev

使用F#数据CSV类型提供程序与CSV解析器和阅读器之间的性能差异

来自分类Dev

使用groovy在apache-nifi中使用executescript处理器更新csv值失败

来自分类Dev

解析器XML问题

Related 相关文章

  1. 1

    具有重复列标题的Apache CSV解析器

  2. 2

    具有重复列标题的Apache CSV解析器

  3. 3

    CSV 解析器文档

  4. 4

    Apache模块命令解析器原型

  5. 5

    解析器 CSV Php 保存 Json

  6. 6

    在Apache Cordova App中读取和解析CSV文件

  7. 7

    Apache NiFi:使用ExecuteScript处理器处理多个csv

  8. 8

    真实世界的Haskell的CSV解析器实现

  9. 9

    使用Lumenworks CSV解析器提取整个行/行

  10. 10

    是否有适合iOS的CSV解析器?

  11. 11

    如何使用opencsv编写java csv解析器

  12. 12

    如何使用 Apache Commons CSV 解析以 GB18030 编码的 csv 文件

  13. 13

    阅读时如何忽略CSV中的空行

  14. 14

    Apache Commons CSV跳过行

  15. 15

    Bindy-Apache骆驼。取消封送CSV时可以忽略位置(列)吗?

  16. 16

    保存之前/之后由于CSV差异而导致的错误解析(带有Apache Commons CSV的Java)

  17. 17

    CSV文件解析问题

  18. 18

    CSV文件解析问题

  19. 19

    如何在Python中使用CSV解析器解析字符串?

  20. 20

    当解析器不是逗号时,如何使用d3解析CSV文件

  21. 21

    使用Apache Spark和Java将CSV解析为DataFrame / DataSet

  22. 22

    Python / Apache-Beam:如何将文本文件解析为CSV?

  23. 23

    如何使用杰克逊CsvMapper或其他csv解析器解析CSV字符串中的列?

  24. 24

    如何使用Apache Tika解析器从HTML提取标题,正文和图像

  25. 25

    JSON 解析器的 Apache Spark 对象不可序列化异常

  26. 26

    使用F#数据CSV类型提供程序与CSV解析器和阅读器之间的性能差异

  27. 27

    使用F#数据CSV类型提供程序与CSV解析器和阅读器之间的性能差异

  28. 28

    使用groovy在apache-nifi中使用executescript处理器更新csv值失败

  29. 29

    解析器XML问题

热门标签

归档