2012-03-27 34 views
4

我想解析一个字符串,我已经将它放入一个数字中。这是我使用的代码,但不工作:这导致java.text.ParseException使用Java中的货币符号解析价格

所以我想匹配字符串成若干

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

,我真的不关心关于货币,但它会很高兴。

我想要的那种以下字符串匹配:

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”中的逗号不同的角色? – 2012-03-27 15:30:36

+0

是的,我确实知道Locale! – Stefan 2012-03-27 15:38:45

回答

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); 
} 

我怀疑你需要找到一个适合你需求的开源货币解析器或者自己写一个。