2012-03-27 12 views
4

私は数値にある文字列を解析したいと思います。これは私が使用しているコードが、動作していないです:Javaで通貨記号で価格を解析する

NumberFormat.getCurrencyInstance(Locale.GERMAN).parse("EUR 0,00"); 

これは

は、だから私は数に文字列を一致させたいjava.text.ParseExceptionになり、私は本当に気にしません通貨については、それはいいです。

は、私は文字列の次の種類が一致たい:

EUR 0,00 
EUR 1.432,89 
$0.00 
$1,123.42 
1,123.42$ 
1,123.42 USD 

確かに、正規表現での方法がありますが、私はそれは一種のやり過ぎだと思います。

+0

各文字列について、どのロケール規則が使用されているかを事前に知っていますか、または最も推測できるアルゴリズムを探していますか。たとえば、「1,000.52」のカンマが「1.000,52」のカンマとは異なる役割を果たすことを認識しているものはありますか? –

+0

はい、私はロケールを知っています! – Stefan

答えて

6

Locale.GERMANに通貨記号がないようです。 Locale.GERMANYはユーロ記号をその通貨(文字列 "EUR"ではなく)として持っています。以下のblam1とblam3は構文解析の例外を引き起こすことに注意してください。CurrencyFormatオブジェクトはblam2しか好きではありません。

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.GERMANY); 

System.out.println("75.13 euro: " + numberFormat.format(75.13)); 

try { 
    System.out.println("Parsed blam1: " + numberFormat.parse("EUR 75,11")); 
} catch (ParseException exception) { 
    System.out.println("Parse Exception1: " + exception); 
} 

try { 
    System.out.println("Parsed blam2: " + numberFormat.parse("75,12 €")); 
} catch (ParseException exception) { 
    System.out.println("Parse Exception2: " + exception); 
} 

try { 
    System.out.println("Parsed blam3: " + numberFormat.parse("€ 75,13")); 
} catch (ParseException exception) { 
    System.out.println("Parse Exception3: " + exception); 
} 

私はあなたがあなたの必要性に合うか1を自分で書くオープンソースの通貨パーサを見つけるために、どちらかが必要になりますことを疑います。

関連する問題