Используйте регулярное выражение для разделения в Java - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть строка IR800610000000700805312546 в Java, мне нужно преобразовать в

IR80-0610-0000-0070-0805-3125-46 .

Я использую split для строки, но не работаю

String[] arrayList = number.split("(\\w{4})");
StringBuilder result = new StringBuilder();
for (int i = 0; i < arrayList.length; i++) {
        result.append(arrayList[i]);
        if (i != arrayList.length - 1) {
            result.append(separator);
        }
}

Могу ли я использовать String Formatter?

Ответы [ 2 ]

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

Вы можете использовать replaceall вместо split и использовать свою группу захвата, за которой следует отрицательный прогноз, чтобы утверждать не конец строки (\w{4})(?!\$).

При замене используйте группу захвата, за которой следует дефис $1-

String number = "IR800610000000700805312546";
number = number.replaceAll("(\w{4})(?!$)", "$1-");
System.out.println(number); // IR80-0610-0000-0070-0805-3125-46

Java демо | regex demo

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

Было бы проще просто использовать StringBuilder напрямую, без явного разбиения:

StringBuilder result = new StringBuilder();
String delim = "";
for (int i = 0; i < number.length(); i += 4) {
  result.append(delim);
  delim = "-";

  result.append(number, i, min(i + 4, number.length()));
}

Этот подход, вероятно, будет, по крайней мере, на порядок быстрее, чем использование регулярных выражений, потому что он далекоменьше работы.

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