2013-03-12 48 views
0

是否有類似於DecimalFormat的Java解析庫?我無法用DecimalFormat和正則表達式來做我想要的。在沒有DecimalFormat的情況下使用Java模式解析數字

我需要能夠:

  • 解析只有一個整數(DecimalFormat的不僅僅是模式需要更多的設置)
  • 解析十進制(精確沒有四捨五入)
  • 解析號碼,如123,456.789。 (DecimalFormat for ###,###。###也接受「123456789」)
+1

有什麼錯試圖用一個正則表達式?你嘗試了什麼? – 2013-03-12 20:30:20

+0

您可以組合正則表達式來檢查DecimalFormat的嚴格規則以進行簡單轉換。 – 2013-03-12 20:41:17

+0

正則表達式在檢查格式時可用,但不提供解析功能。例如。我可以正則表達式檢查「123,456.789 $」,但我仍然需要正確解析它。 使用兩者都可以解決問題,但是過程變得複雜(兩種不同的檢查增加了錯誤的概率) – 2013-03-12 20:44:53

回答

0

您可以嘗試將它當作字符串對待並標記它。

str.split(「\\」)將拆出小數邊,然後串到你的精度,然後在數量方面,你可能分裂(「」)

這是一個相當位手工解析工作,但...

+0

是的,但是由於需要支持語言環境,它變得不是一個好主意。 – 2013-03-13 13:23:14

0

使用正則表達式和NumberFormat

Map<Pattern,NumberFormat> POSSIBLE_FORMATS = ...; 
String input = ...; 
Number value = null; 
for (Map.Entry<Pattern,NumberFormat> possible : POSSIBLE_FORMATS.entrySet()) { 
    if (possible.getKey().matcher(input).matches()) { 
    value = possible.getKeValue().parse(input); 
    break; 
    } 
} 
if (value == null) { 
    throw new IllegalArgumentExcption("no valid input format: " + input); 
} 
+0

由於millimoose在上面發表評論,正則表達式的方式將是方式。但它有一個弱點。如何解決語言環境問題?從給定的語言環境準備運行時模式? – 2013-03-13 13:33:22

+0

本地化的值是一個問題。您可以使用DecimalFormatSymbols準備模式。 – 2013-03-15 22:14:19

相關問題