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

hb.*_*ara 5 supercsv

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

Jam*_*ett 7

你完全正确 - 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:)