2016-07-24 55 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

不正则表达式对象有一个replaceall方法吗? – sln

相关问题