【问题标题】:Case-insensitive headers in SuperCSV writer?SuperCSV 编写器中不区分大小写的标题?
【发布时间】:2013-08-03 00:32:34
【问题描述】:

使用 CsvMapWriter 如果我添加一个标题说“区域”,然后用键“区域”和值“东北”写入一行,它不会被添加到 SuperCSV 输出中。我假设它没有找到一个有效的列来输入“区域”的值。

对于这个应用程序,我不能重命名标题,例如强制小写。并且行键/值对,例如“region”和“northeast”可以以大写、小写或混合大小写的形式出现,但无论如何它都应该添加到正确的不区分大小写的标题列中(标题本身可能是“Region” , '地区' 等)

【问题讨论】:

    标签: java case-insensitive supercsv


    【解决方案1】:

    想到了两个解决方案。

    1. 如果可能,请使用CsvBeanWriter 而不是CsvMapWriter

      - 或 -

    2. 使用小写 Map 实现包装您的 Map(或将值复制到具有正确大小写的新地图)。

    小写地图实现 (org.apache.commons.collections.map.CaseInsensitiveMap) 可从 Apache Commons Collections 获得。

    【讨论】:

    • 我不确定是否可以在这种情况下使用 BeanWriter,因为 csv 是从大约 7 个不同类中选择的字段?
    • @xref 您仍然可以添加一个包含所有值的自定义类,而不是地图。不过,最坏的情况是,通读 Map 的所有条目并将它们放入带有所有小写键的新 Map 中并不会太困难(效率不是非常高,但可能不是一个大问题,除非您处理超过 100,000 行)。
    • 嗯,我事先不知道标题的名称是什么,或者会有多少,因为每个 csv 都是唯一的。自定义类可以在 supercsv 中处理吗?
    • @xref 如果您不知道标题的名称,那么我建议您只需将值重新映射到所有小写键的新映射,或使用自动执行此操作的映射实现(例如 @987654325 @ 来自 Apache Commons 库)。
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2013-03-06
    • 2020-02-18
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多