首页 > 解决方案 > univocity - 如何从选定的字符中解析字符串

问题描述

我有下一个 .csv 文件:

tt0102057, 6, 2010-06-19, 钩

tt0102059, 7 ,2013-06-23, 热点!

tt0102070, 5, 2010-02-10, 哈德逊鹰

我需要将第一列的值解析为 int 值,而不是字符串。所以我需要跳过前两个符号并将其余的作为整数。

如何在解析阶段使用单义解析器来做到这一点?

该代码有效并将数据保存到bean:

    BeanListProcessor<univMovie> rowProcessor = new BeanListProcessor<univMovie>(univMovie.class);
    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.setProcessor(rowProcessor);
    settings.setHeaderExtractionEnabled(true);

    CsvParser parser = new CsvParser(settings);
    parser.parse(new FileReader("src/main/resources/movie.csv"));
    List<univMovie> beans = rowProcessor.getBeans();

标签: javaparsingunivocity

解决方案


你有很多选择:

最简单的方法是,在您的univMovie类上,在@Replace将接收该数据的字段上方添加一个注释:

@Parsed
@Replace(expression = "tt", replacement = "")
int yourField;

如果您的字段可能比较棘手并且正则表达式不是一个简单/清晰的解决方案,您可以将@Parsed注释放在将为您设置该字段的方法上:

@Parsed
void setYourField(String value){
    String cleanValue = someMethodToCleanYourValue(value);
    yourField = Integer.parseInt(cleanValue);
}

您还可以告诉处理器转换多个字段:

rowProcessor.convertIndexes(Conversions.replace("tt", ""))
    .set(0); //one or more indexes

希望这可以帮助


推荐阅读