univocity - 如何从选定的字符解析字符串
univocity - How to parse string from selected char
我有下一个 .csv 文件:
tt0102057, 6, 2010-06-19, Hook
tt0102059, 7 ,2013-06-23, Hot Shots!
tt0102070, 5, 2010-02-10, Hudson Hawk
我需要将第 1 列的值解析为 int 值,而不是 String。所以我需要跳过前两个符号并将其余的作为整数。
如何在解析阶段使用 univocity 解析器来做到这一点?
代码有效并将数据保存到 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();
你有很多选择:
最简单的方法是,在您的 univMovie
class 上,在将接收该数据的字段上方添加一个 @Replace
注释:
@Parsed
@Replace(expression = "tt", replacement = "")
int yourField;
如果您的字段可能比较棘手并且正则表达式不会成为 easy/clear 解决方案,您可以将 @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
希望对您有所帮助
我有下一个 .csv 文件:
tt0102057, 6, 2010-06-19, Hook
tt0102059, 7 ,2013-06-23, Hot Shots!
tt0102070, 5, 2010-02-10, Hudson Hawk
我需要将第 1 列的值解析为 int 值,而不是 String。所以我需要跳过前两个符号并将其余的作为整数。
如何在解析阶段使用 univocity 解析器来做到这一点?
代码有效并将数据保存到 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();
你有很多选择:
最简单的方法是,在您的 univMovie
class 上,在将接收该数据的字段上方添加一个 @Replace
注释:
@Parsed
@Replace(expression = "tt", replacement = "")
int yourField;
如果您的字段可能比较棘手并且正则表达式不会成为 easy/clear 解决方案,您可以将 @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
希望对您有所帮助