2012-04-19 40 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);