Я хочу отформатировать 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 или любого другого метода, чтобы разрешить такие вещи, как удаление, вставка.




Вы можете просто использовать цикл 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++;
}
Для обработки обоих случаев вы можете использовать эту демонстрацию
то с этим нужно обращаться по-другому, потому что в местах разрыва нет симметрии, это должно быть сделано с жестко закодированным значением, хотя теперь вы задаете другой вопрос
Основная идея заключается в том, что у показа карт Visa есть симметричные пространства, а у AMEX - нет. Моя борьба была за AXEM в указанном выше формате (асимметричный). Можно ли это сделать с помощью REGEX?
это было бы уродливо и медленно, и даже если вы используете регулярное выражение, вам все равно потребуются разные случаи (если) для обработки разных типов, потому что во входных данных нет указания добавлять пробелы в соответствии с разными шаблонами
Но если, например, у меня есть gap = [4, 11] input: 345678901234564, как я могу вывести: 3456 789012 34564