2013-11-21 84 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