我想使用SuperCSV CellProcessor解析带逗号的double作为小数分隔符(','而不是'。')
我想将第一个元素(0,35)解析为Double
0,35;40000,45
我尝试过类似的东西:
/** 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)) };
ParseBigDecimal工作正常,但parseDouble似乎不起作用,它给了我一个异常:org.supercsv.exception.SuperCsvCellProcessorException:'0,35'无法解析为Double
答案 0 :(得分:7)
你完全正确 - ParseDouble
不支持法语式小数点分隔符(逗号),但是ParseBigDecimal
。如果您认为这是一项有用的功能,为什么不提交feature request。
最简单的解决方法是在ParseDouble
之前简单地链接StrReplace以将逗号转换为句号。
new StrReplace(",", ".", new ParseDouble())
或者,你可以写一个custom cell processor:
解析Double(带有可配置的小数分隔符)
将BigDecimal转换为Double(调用doubleValue()
) - 然后可以在new ParseBigDecimal(FRENCH_SYMBOLS)
哦,将来你可能想提一下你的文件是分号分开的,你用CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE
设置了超级CSV:)