2012-04-19 92 views
1

我無法將String s="45,333"轉換爲長或雙的數字。誰能幫我解決這個問題..我已新增該模式片段,當我嘗試運行代碼它顯示NumberFormatException ..在java中將字符串轉換爲long

public static void main(String args[]) 
{ 
long a=85200; 
NumberFormat numberFormat=NumberFormat.getNumberInstance(); 
String s=numberFormat.format(a); 
Long l=Long.parseLong(s.toString()); 
System.out.println("The value:"+s); 
System.out.println("The value of long:"+l); 
} 
+0

這是S的值? AFAIK,parseLong期望沒有數千個分隔符的數字。 – SJuan76 2012-04-19 10:36:46

+0

它引發了什麼異常? – DonCallisto 2012-04-19 10:37:14

+0

String s = numberFormat.format(a); long a = 85200; – 2012-04-19 10:37:23

回答

14

考慮NumberFormat.parse()方法,而不是Long.parseLong()

Long.parseLong()預計String裏面沒有任何格式化符號。

+0

非常真實的是,他正在得到例外,因爲','在數字之間增加 – AurA 2012-04-19 10:43:31

+0

是的,這是逗號。 – Jon 2012-04-19 10:49:32

3

混合NumberFormatLong.parseLong()不是一個好主意。

NumberFormat可識別區域設置(在你的榜樣,它使用默認語言環境爲您的計算機),也可以明確地指定格式模式,而中Number子類只讀「純」號(可選的減號+數字的parseXXX()方法)。

如果使用NumberFormat對其進行格式化,則應使用NumberFormat.parse()將其解析回來。但是,您不應該依賴默認區域設置,而是嘗試指定一個(或使用帶有模式的DecimalFormat)。否則,您可能會遇到一些令人討厭且難以發現的錯誤。

如果您不關心格式,請考慮使用Long.toString()將長整型值轉換爲字符串並將其轉換回Long.parseLong()。它更容易使用,線程安全(與NumberFormat不同)並且在任何地方都可以工作。

2

正如指出的,您可以使用NumberFormat.parse()這樣的:

public static void main(String args[]) { 
    long a=85200; 
    NumberFormat numberFormat=NumberFormat.getNumberInstance(); 
    String s=numberFormat.format(a); 
    Long l; 
    try { 
     l = numberFormat.parse(s.toString()).longValue(); 
    } catch (ParseException ex) { 
     l = 0L; 
     // Handle exception 
    } 
    System.out.println("The value:"+s); 
    System.out.println("The value of long:"+l); 
} 
-1
long l = Long.valueOf(s); 
System.out.println("The value of long:"+l);