2

我有一个包含 2 列的 CSV 文件(1 列包含单词列表,另一列包含它们在文本文档中的使用频率)。我很好奇使用 SuperCSV 在类型对象的 ArrayList 中读取它的最佳方法。提前致谢。

4

2 回答 2

2

我假设您已经阅读了 Super CSV网站上的文档和示例?

如果您CsvListReader与单元处理器一起使用(我建议您使用类似的东西,new CellProcessor[]{new NotNull(), new NotNull(new ParseInt())}您将获得一个对象列表 - 但在从列表中获取值时,您必须转换为适当的类型。如果您不使用单元处理器您将获得一个字符串列表,并且必须将计数转换为整数 - 这取决于您,但我更喜欢让 Super CSV 进行所有转换。

您始终可以使用CsvBeanReader来避免任何强制转换 - 您只需要创建一个具有 2 个字段的 bean:word(字符串)和 count(整数)以及它们的 getter/setter。

这完全取决于您 - 确实没有“最佳方式”,但使用 CSV 库是一种很好的做法。在存储词频的结果方面,我建议使用Map<String,Integer>(word -> count)。

于 2013-06-20T12:10:50.443 回答
0

首先设置一个处理器:

    private static CellProcessor[] getProcessors() {

        final CellProcessor[] processors = new CellProcessor[] {
                new NotNull(new ParseInt()), 
                new NotNull(), 
                new NotNull(), 
                new Optional(new ParseLong())

        };
        return processors;
    }

接下来:构建一个阅读器(有 3 种类型),因此对于我们的示例,我们可以使用它:

listReader = new CsvListReader(
new InputStreamReader(new FileInputStream(CSVFILE, CHARSET),CsvPreference.TAB_PREFERENCE);
listReader.getHeader(false);
while ((listReader.read(processors)) != null) {}

你完成了,祝你好运。

于 2019-07-25T19:49:08.000 回答