我想使用SuperCSV CellProcessor用逗号作为小数分隔符(','而不是'.')解析double.
我想将第一个元素(0,35)解析为Double
0,35;40000,45
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
/** FRENCH_SYMBOLS */
private static final DecimalFormatSymbols FRENCH_SYMBOLS = new DecimalFormatSymbols(Locale.FRANCE);
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(FRENCH_SYMBOLS);
final CellProcessor[] processors = new CellProcessor[] {
new NotNull(new ParseDouble(new FmtNumber(df))),
new NotNull(new ParseBigDecimal(FRENCH_SYMBOLS)) };
Run Code Online (Sandbox Code Playgroud)
ParseBigDecimal工作正常,但parseDouble似乎不起作用,它给了我一个异常:org.supercsv.exception.SuperCsvCellProcessorException:'0,35'无法解析为Double
你完全正确 - ParseDouble不支持法式十进制分隔符(逗号),但ParseBigDecimal确实如此.如果您认为这是一个有用的功能,为什么不提交功能请求.
最简单的解决方法是在将逗号转换为句点之前简单地链接StrReplaceParseDouble.
new StrReplace(",", ".", new ParseDouble())
Run Code Online (Sandbox Code Playgroud)
或者,您可以编写一个自定义单元处理器,它可以:
解析一个Double(带有可配置的小数分隔符)
将BigDecimal转换为Double(调用doubleValue()) - 然后可以在您的之后链接new ParseBigDecimal(FRENCH_SYMBOLS)
哦,将来你可能想提一下你的文件是分号分开的,你已经设置了Super CSV with CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE:)