Сплит число тысяч ява - PullRequest
       1

Сплит число тысяч ява

1 голос
/ 03 апреля 2019

Я хочу разделить немного 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, поэтому мне нужно найти другой способ избежать этого диапазона. Я получаю String и хочу проанализировать его как строку, а не число (Integer, Double). Я думаю, что могу использовать регулярные выражения или что-то подобное, но я не знаю, как это сделать.

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

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Либо используйте 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 голос
/ 03 апреля 2019

Чтобы иметь такие огромные числа, вам придется использовать 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);
}

Выход: 60000

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...