6

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として解析できませんでした

4

1 に答える 1

9

あなたは完全に正しいです-ParseDoubleフランス語スタイルの小数点記号(コンマ)をサポートしていませんが、サポートしてParseBigDecimalいます。これが便利な機能だと思われる場合は、機能リクエストを送信してみませんか。

最も簡単な回避策は、コンマをピリオドに変換する前にStrReplaceをチェーンすることです。ParseDouble

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

または、次のいずれかのカスタムセルプロセッサを作成することもできます。

  • Doubleを解析します(構成可能な小数点記号付き)

  • BigDecimalをDoubleに変換します(呼び出しdoubleValue())-これは、new ParseBigDecimal(FRENCH_SYMBOLS)

ああ、そして将来的には、ファイルがセミコロンで区切られ、スーパーCSVを設定したことを伝えたいと思うかもしれませんCsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE:)

于 2013-01-10T23:01:40.097 に答える