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

相關問題