supercsv - 用逗号作为小数点分隔符解析双 superCSV?

标签 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 似乎不起作用,它给了我一个异常(exception):org.supercsv.exception.SuperCsvCellProcessorException: '0,35' could not be parsed as a Double

最佳答案

你完全正确 - ParseDouble不支持法式小数点分隔符(逗号),但 ParseBigDecimal做。如果您认为这是一个有用的功能,为什么不提交 feature request .

最简单的解决方法是简单地链接一个 StrReplace之前ParseDouble将逗号转换为句号。

new StrReplace(",", ".", new ParseDouble())

或者,你可以写一个 custom cell processor要么:
  • 解析一个 Double(带有可配置的小数分隔符)
  • 将 BigDecimal 转换为 Double (调用 doubleValue() ) - 然后可以将其链接在您的 new ParseBigDecimal(FRENCH_SYMBOLS) 之后

  • 哦,将来您可能想提及您的文件是用分号分隔的,并且您已经使用 CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE 设置了 Super CSV。 :)

    关于supercsv - 用逗号作为小数点分隔符解析双 superCSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254435/

    相关文章:

    java - 使用superCSV读取一个80GB的大文本文件

    Java 创建 100MB 压缩 csv 文件性能问题

    java - 搞砸了 CSV 导致异常

    Hadoop 与 supercsv

    Java CSV 读取器/写入器问题

    java - SUPER CSV 将 bean 写入 CSV

    java - 使用 supercsv 的 CSV header 验证

    csv - 如何使用 Super CSV 部分读取 CSV 文件

    java - 使用 SuperCSV 一次性验证每个字段

    java - super CSV Maven 存储库