2012-08-15 27 views
25

我收到NumberFormatException,当我尝试用Integer.parseInt()解析265,858。如何将包含逗号的数字字符串解析为java中的整数?

有没有什么办法将它解析为一个整数?

+5

问题并不清楚,'''是什么?数千或十进制分隔符? – 2012-08-15 16:44:06

+4

我认为这是...有没有什么办法可以将它解析成** an **整数? – SiB 2012-08-15 16:46:28

+1

还是2 csv格式的整数? 265和858? – 2012-08-15 16:47:41

回答

57

这是逗号小数点分隔符或者是这两个数字?在第一种情况下,你必须提供LocaleNumberFormat类使用逗号作为小数点分隔符:

NumberFormat.getNumberInstance(Locale.FRANCE).parse("265,858") 

这导致265.858。但是,使用美国区域,那么你会得到265858

NumberFormat.getNumberInstance(java.util.Locale.US).parse("265,858") 

这是因为在法国他们对待逗号作为小数点分隔符,而在美国 - 作为分组(千)分隔符。

如果它们是两个数字 - String.split()它们并独立解析两个独立的字符串。

+2

“将其解析为一个整数”几乎缩小了解释:) – 2012-08-15 16:46:12

+3

第三个选项:它是一个分组分隔符。 – 2012-08-15 16:46:39

+0

是:一个整数,千位分隔符。 – 2012-08-15 16:47:05

2

一种办法是剥去逗号:

"265,858".replaceAll(",",""); 
+0

更简单快捷的解决方案:'replace'代替'replaceAll'。 – 2012-08-15 16:49:17

0

试试这个:

String x = "265,858 "; 
    x = x.split(",")[0]; 
    System.out.println(Integer.parseInt(x)); 

编辑: 如果你希望它四舍五入到最接近的整数:

String x = "265,858 "; 
    x = x.replaceAll(",","."); 
    System.out.println(Math.round(Double.parseDouble(x))); 
+0

这给出了'265' – Cratylus 2012-08-15 16:44:09

+1

这应该给265,他不希望它四舍五入或者如此以来 – SpiXel 2012-08-15 16:45:16

+0

但是数字是'265858'或'265.858' – Cratylus 2012-08-15 16:46:08

15

在将其解析为int之前,您可以删除, 01:

int i = Integer.parseInt(myNumberString.replaceAll(",", "")); 
1

其点击对我来说,假设这是一个单一的数字,是第一件事...

String number = "265,858"; 
number.replaceAll(",",""); 
Integer num = Integer.parseInt(number); 
9

如果它是一个&要删除分隔号,NumberFormat将一些回报给你。使用getNumberInstance方法时,请确保使用正确的区域设置。

例如,某些区域设置将逗号和小数点替换为您可能习惯的值。

然后只需使用intValue方法返回一个整数。尽管如此,你必须将所有东西包装在try/catch块中,以解释Parse Exceptions。

try { 
    NumberFormat ukFormat = NumberFormat.getNumberInstance(Locale.UK); 
    ukFormat.parse("265,858").intValue(); 
} catch(ParseException e) { 
    //Handle exception 
} 
相关问题