求教!
给出字符串,例如q3t2abc应该替换数字右边的字符变成qttttaaabc.
再如12ra应该替换成1rrra。字符串最后数字不替换。
该是怎样的思路呀?

解决方案 »

  1.   

    没有优化,代码如下,希望对你有点帮助package com.ddpie;public class TestStr {
    public static String parse(String in){
    if(in==null || in.trim().length()==0)
    return "";
    StringBuffer out = new StringBuffer();
    for(int i=0 ; i<in.length()-1 ; i++){
    char c1 = in.charAt(i);
    int type1 = Character.getType(c1);
    char c2 = in.charAt(i+1);
    int type2 = Character.getType(c2);
    if(type1!=9){//不是数字
    out.append(c1);
    continue;
    }
    if(type2==9){//是数字
    out.append(c1);
    continue;
    }
    int valueOfC1 = Integer.parseInt(new Character(c1).toString());
    for(int j=0 ; j<valueOfC1 ; j++){
    out.append(c2);
    }
    }
    out.append(in.charAt(in.length()-1));
    return out.toString();
    }
    public static void main(String[] args){
    String str = "";
    // str = "q3t2abc";
    str = "12ra";
    System.out.println(TestStr.parse(str));
    }
    }
      

  2.   

    public static String apprendString(String srcString){
    if (srcString == null || srcString.trim().length() == 0){
    return "";
    }
    Pattern pattern = Pattern.compile("(\\d[a-zA-Z])");
    Matcher matcher = pattern.matcher(srcString);

    int start = 0;
    StringBuilder sb = new StringBuilder("");
    while (matcher.find(start)){
    String tmp = matcher.group(1);
    int index = srcString.indexOf(tmp,start);
    int nextStart = index + tmp.length();
    sb.append(srcString.substring(start, index));
    int n = Integer.parseInt(Character.toString(tmp.charAt(0)));
    for (int i = 0; i <= n; i ++){
    sb.append(tmp.charAt(1));
    }

    start = nextStart;
    }
    sb.append(srcString.substring(start));
    System.out.println(sb.toString());

    return sb.toString();
    }
      

  3.   

    下面使用正则表达式实现的^o^package com.ddpie;import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class TestStrRegex {

    public static String parse(String in){
    StringBuffer out = new StringBuffer();
    Pattern pattern = Pattern.compile(
    "(.*?)([0-9])([a-zA-Z])(.*?)",Pattern.DOTALL);
    Matcher matcher = pattern.matcher(in);
    int tailIndex = 0;
    while(matcher.find()){
    out.append(matcher.group(1));
    int intValue = Integer.parseInt(matcher.group(2));
    for(int i=0 ; i<=intValue ; i++){
    out.append(matcher.group(3));
    }
    tailIndex = matcher.start(4);
    }
    out.append(in.substring(tailIndex));
    return out.toString();
    }

    public static void main(String[] args){
    String in = "q3t2abc";
    System.out.println(TestStrRegex.parse(in));
    }
    }
      

  4.   

    String r = "q13t2abc";
    Matcher m = Pattern.compile("([0-9])([a-z])").matcher(r);
    while(m.find()){
    int cnt = new Integer(m.group(1)).intValue();
    String rep = m.group(2);
    String str =new String(new char[cnt+1]).replaceAll(new String(new char[1]), rep);
    r=r.replaceFirst(m.group(0),str);

    }
    System.out.println(r);
      

  5.   

    String str = "q3t2abc5";
            String tempStr = "";
            String tempChar = "";
            if (Character.isLetter(str.charAt(str.length() - 1)))
                tempChar = "" + str.charAt(str.length() - 1);
            tempStr = ""+str.charAt(str.length() - 1);
            for (int i = str.length() - 2; i >= 0; i--) {
                char c = str.charAt(i);
                if (Character.isLetter(c)) {
                    tempChar = "" + c;
                    tempStr = c + tempStr;
                } else {
                    int n = (int) c - 48;
                    for (int j = 0; j < n; j++) {
                        tempStr = tempChar + tempStr;
                    }
                }
            }
            System.out.println(tempStr);
      

  6.   

    谢谢大家。我初学java。真是长见识呀