2013-11-21 129 views
2

我想從字符串中刪除每個數字,然後複製該數字後面的字母。 因此,例如字符串4a2b應輸出aaaabb。 到目前爲止,我的代碼如下所示:複製字符串中的字符

Scanner scan= new Scanner(System.in); 
    String s = scan.nextLine(); 
    String newString = s.replace(" ", ""); 
    newString=newString.replaceAll("\\W+", ""); 
    newString=newString.replaceAll("\\d+", ""); 
    System.out.println(newString); 

是否可以使用正則表達式和的replaceAll這樣做呢?

回答

0

嘗試,

String newString = "4a2b"; 
    String num = ""; 
    StringBuilder res = new StringBuilder(); 
    for (int i = 0; i < newString.length(); i++) { 
     char ch = newString.charAt(i); 

     if (Character.isDigit(ch)) { 
      num += ch; 

     } else if (Character.isLetter(ch)) { 
      if (num.length() > 0) { 
       for (int j = 0; j < Integer.parseInt(num); j++) { 
        res.append(ch); 
       } 
      } 
      num=""; 
     } 
    } 
    System.out.println(res); 
+0

這將導致 「4a2b」 變成 「AAAB」,這是不是OP想要什麼。 – Piovezan

+0

仍然無法正常工作。 OP希望「4a」變成「aaaa」,「2b」變成「bb」。 – Piovezan

+0

應該補充一點,它應該適用於每個字母,而不僅僅是a和b。 – user3017281

0

試試這個:

public static void main(String[] args) 
{ 
    String str = "ae4a2bca"; 
    Matcher m = Pattern.compile("(\\d+)(.)").matcher(str); 
    StringBuffer sb = new StringBuffer(); 
    while (m.find()) 
    { 
     m.appendReplacement(sb, times("$2", Integer.parseInt(m.group(1)))); 
    } 
    m.appendTail(sb); 
    System.out.println(sb.toString()); 
} 

private static String times(String string, int t) 
{ 
    String str = ""; 
    for (int i = 0; i < t; ++i) str += string; 
    return str; 
} 
+0

您是否嘗試過我的解決方案?它超級整潔,恕我直言。 –

+0

它也是使用正則表達式作爲OP請求的那個。 – Piovezan