使用逗号作为小数分隔符解析双superCSV?

时间:2013-01-10 09:22:52

标签: supercsv

我想使用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

1 个答案:

答案 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:)