从带有千位分隔符的字符串中解析数字

3

我正在从给定的字符串中解析Long值。

Long.valueOf()Long.parseLong()不能正常工作,因为这样的字符串str的格式为1,234,567,并且可能会被空格包围。

我可以通过处理字符串以获取裸数字来解决这个问题--然后解析出值。所以 - 它将是类似于:

str.trim(); 
String tempArray [] = str.split(","); 
str = ""; 
for (String s:tempArray)
    str+=s; 

然而,一定有更好的方法来做这件事。它是什么?
3个回答

6
你可以使用适当的区域设置Locale,在这里使用NumberFormat。这里可以使用美国地区设置。不过,你需要注意空格。
String str = "1,234,567";
NumberFormat format = NumberFormat.getInstance(Locale.US);
System.out.println(format.parse(str.replace(" ", "")));

您甚至可以使用稍微更强大的DecimalFormat。您可以添加任何分组或小数分隔符:

DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setGroupingSeparator(',');
decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);

System.out.println(decimalFormat.parse(str.replace(" ", "")));

4
当然可以 :)
String newStr = str.replaceAll(",","");

去除偶数空格:

String newStr = str.replaceAll(",","").replaceAll(" ","");

你可以立即将其传递给Long。
Long myLong = Long.valueOf(str.replaceAll(",","").replaceAll(" ",""));

可能需要删除空格,因为它“可以被空格包围”。 - barbiepylon
哎呀,我想我可能看到了你回答的早期版本!看起来不错! - barbiepylon
我喜欢这个 - 附注:str.replaceAll(",| ","") 可以在 str 上节省另一个迭代。 - user4402742
1
由于replaceAll中的第一个字符串是正则表达式,您可以使用类似"[, ]"的形式来避免第二次调用replaceAll。 - Ulf Jaehrig

4

replaceAll方法可以删除逗号,trim方法则可以删除空格:

Long.parseLong(str.trim().replaceAll(",", ""))

trim 只会移除字符串开头和结尾的空格。 - barbiepylon
@BarbiePylon 这个问题说字符串可以“被空格包围”,所以在这里使用 trim 是合适的。 - Neil Masson
我并没有像那样字面上理解,但我想你说得有道理! - barbiepylon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接