Regex добавить пробел в заданных позициях - PullRequest
0 голосов
/ 02 июня 2018

Я хочу отформатировать AMEX и карту ViSA, используя один и тот же обработчик (JAVA-Android)

Для Visa я хочу выглядеть как "1234 1234 1234 1234"

И яЯ использую:

String initial = s.toString();
// remove all non-digits characters
String processed = initial.replaceAll("\\D", "");
// insert a space after all groups of 4 digits that are followed by another digit
processed = processed.replaceFirst("(\\d{4})(?=\\d)", "$1 ");
// to avoid stackoverflow errors, check that the processed is different from what's already
//  there before setting
if (!initial.equals(processed)) {
   // set the value
   s.replace(0, initial.length(), processed);
}

Мой вопрос:

Учитывая, что у меня есть массив позиций, которые необходимо заменить на "" (пример [4,9,14]) какможно ли отформатировать это с помощью REGEX или любого другого метода, чтобы разрешить такие вещи, как удаление, вставка.

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете просто использовать цикл for для вставки символа с интервалом в 4 цифры.

Балансировать интервал, сохранять переменную gap и увеличивать его во время каждой итерации, чтобы сохранить сбалансированное положение для пробела,учитывая предыдущие добавленные пробелы, поэтому используйте

String initial = s.toString();
// remove all non-digits characters
    String processed = initial.replaceAll("\\D", "");
    StringBuilder sb = new StringBuilder(processed);
    System.out.println(sb);
    int gap = 0;
    for (int i = 4; i< sb.length()-1;i+=4){
        sb.insert(i + gap,' ');
        gap++;
    }

Демонстрационная ссылка

Для обработки обоих случаев вы можете использовать эту демонстрацию

...