我有一个包含 2 列的 CSV 文件(1 列包含单词列表,另一列包含它们在文本文档中的使用频率)。我很好奇使用 SuperCSV 在类型对象的 ArrayList 中读取它的最佳方法。提前致谢。
问问题
651 次
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 回答