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

Java 从带有数千个分隔符的字符串中解析数字,java,string,numbers,string-parsing,Java,String,Numbers,String Parsing,我正在解析给定字符串中的长值 Long.valueOf()和Long.parseLong()不起作用,因为这样的字符串str格式为1234567,可以用空格包围 我可以通过处理字符串将其转换为纯数字,然后解析出值来实现这一点。所以-它会是这样的 str.trim(); String tempArray [] = str.split(","); str = ""; for (String s:tempArray) str+=s; 然而,必须有更好的方法来做到这一点。这是什么?当然

我正在解析给定字符串中的长值

Long.valueOf()
Long.parseLong()
不起作用,因为这样的字符串
str
格式为1234567,可以用空格包围

我可以通过处理字符串将其转换为纯数字,然后解析出值来实现这一点。所以-它会是这样的

str.trim(); 
String tempArray [] = str.split(","); 
str = ""; 
for (String s:tempArray)
    str+=s; 
然而,必须有更好的方法来做到这一点。这是什么?

当然有可能:)

要删除偶数空格,请执行以下操作:

String newStr = str.replaceAll(",","").replaceAll(" ","");
你可以马上把它传给Long

Long myLong = Long.valueOf(str.replaceAll(",","").replaceAll(" ",""));
您可以在这里使用,使用适当的。在这里,美国地区就足够了。不过你必须注意空格

String str = "1,234,567";
NumberFormat format = NumberFormat.getInstance(Locale.US);
System.out.println(format.parse(str.replace(" ", "")));
你甚至可以使用稍微强大一点的。您可以添加任何分组或小数分隔符:

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

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

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

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

可能也需要删除空白,因为它“可以被空格包围”。哎呀……我想我一定看到了你答案的早期版本!看起来不错!我喜欢这个-w/注意:str.replaceAll(“,|“,”)在STRA上保存另一个迭代。因为replaceAll中的第一个字符串是regexp,您可以使用类似“[,]”的东西来避免第二个replaceAll调用。trim只删除前导和尾随whitespace@BarbiePylon问题是字符串可以“被空格包围”,所以
trim
在这里是合适的。我并不是这样认为的,但我想你说得有道理!
Long.parseLong(str.trim().replaceAll(",", ""))