拆分数以千计的Java

时间:2019-04-03 03:18:05

标签: java regex formatting

我想通过在其中添加一些逗号来分隔String。 例如:

"1234" => "1,234"
"12345" => "12,345"
"123456" => "123,456"
"1234567" => "1,234,567"
"12345678" => "12,345,678"
"123456789" => "123,456,789"

我可以有一个很大的字符串,例如“ 123456789123456789123456789123456789123456789”

当前,我将此代码与DecimalFormat一起使用,但是由于我将其强制转换为double,所以我的数字限制为Double的范围,因此我需要找到另一种避免此范围的方法。我收到一个String,我想像字符串一样解析它,而不是数字(IntegerDouble)。我想我可以使用正则表达式或类似的东西,但是我不知道该怎么做。

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(',');
DecimalFormat df = new DecimalFormat("###,###", symbols);
formattedStr = df.format(Double.parseDouble(str));

2 个答案:

答案 0 :(得分:2)

要么使用其他答案中提到的BigInteger,要么使用如下正则表达式:

public class Test {
     public static void main(String[] args) {
         String s = "12345678912345678912345678";
         String formatted = s.replaceAll("(\\d)(?=(\\d{3})+$)", "$1,");
         System.out.println(formatted); // 12,345,678,912,345,678,912,345,678
     }
}

表达式将在所有数字之后附加一个逗号,然后再跟一组至少3位数字。

答案 1 :(得分:1)

要拥有如此庞大的数字,您将必须使用 BigInteger BigDecimal 。此代码段应为您提供帮助:

public static void main(String[] args) {
    BigInteger integer = BigInteger.valueOf(60000);

    String result = NumberFormat.getNumberInstance(Locale.US).format(
        integer);
    System.out.println(result);
}

输出:60,000

祝你好运。