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

Parsing a number from a string with thousands seperators

我正在从给定的 String-s 中解析出 Long 值。

Long.valueOf()Long.parseLong() 不起作用 - 因为这样的字符串 str 的格式为 1,234,567 并且可以用空格包围。

我可以通过处理 String 使其成为裸数字来解决这个问题——然后解析出该值。所以 - 它会像

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

但是,必须有更好的方法来做到这一点。这是什么?

当然可以:)

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

删除偶数空格:

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

而且可以马上传给Long

Long myLong = Long.valueOf(str.replaceAll(",","").replaceAll(" ",""));

您可以使用 NumberFormat here, with appropriate LocaleUS 语言环境就足够了。不过你必须注意空格。

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(" ", "")));

replaceAll方法可以去掉逗号,trim去掉白色space:

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