2016-07-24 3 views
-1

У меня есть строка, содержащая цифры "abc123", и я хочу, чтобы каждая цифра отображалась в 3 раза примерно так: "abc111222333".Тройка всех цифр в строке

Есть ли способ сделать это с помощью replaceAll("\\d+.*", ???), а ? - какая бы цифра не была найдена?

Соответственно, есть все, что "лучше", чем это ?:

String input = "abc1x23z"; 
String output = input; 

for (int i = 0, j = i; i < input.length(); i++) { 
    char c = input.charAt(i); 

    if (Character.isDigit(c)) { 
     String a = output.substring(0, j+1); 
     String b = output.substring(j, output.length()); 

     output = a + c + b; 
     j += 3; 
    }else{ 
     j++; 
    } 
} 

System.out.println(output);  // abc111x222333z 
+3

'.replaceAll ("(\\ d)", "$ 1 $ 1 $ 1")' – Tunaki

+1

Пожалуйста, не удаляйте свои попытки, что-то лучше чем ничего. – nicael

+0

Просто подумал, что это не нужно и вводит в заблуждение для будущих зрителей. – sinclair

ответ

3

Вы можете использовать "abc123".replaceAll("(\\d)", "$1$1$1")

Объяснение:

  • \\d соответствует одной цифре
  • () захватывает группа
  • $1 указывает на первую группу, захваченном каждым матчем регулярного выражения
+0

@Tunaki в дополнение к вашему пути вы можете предварительно скомпоновать шаблон, и использовать этот шаблон для выполнения той же функции, чтобы ускорить процесс (если он должен быть дружественным к производительности) – n247s

+0

@ n247s 'String.replaceAll' напрямую не поддерживает передачу' Pattern'. Как бы вы использовали свой шаблон в этом случае? Кроме того, я думаю, что создание новой строки - это часть, которая на самом деле является самой дорогой для такого простого регулярного выражения. Но в более общем контексте вы правы – Dici

+0

Не имеет ли объект regex метод replaceall? – sln