从包含数千个分隔符的字符串中解析数字

时间:2015-03-16 15:12:06

标签: java string numbers string-parsing

我正在解析给定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; 
但是,必须有更好的方法来做到这一点。它是什么?

3 个答案:

答案 0 :(得分:5)

您可以在此使用NumberFormat,并使用适当的Locale US 区域设置就足够了。你可以照顾空白。

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

答案 1 :(得分:4)

当然有可能:)

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

删除偶数空格:

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

你可以立即将它传递给Long

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

答案 2 :(得分:4)

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

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