把输入的数字+字母替换为字母个数为数字
用replaceAll的方法怎么实现?
不知道replacement这个怎么写String input="5x";
String output="xxxxx";
String regex="(\\d)([a-zA-Z])";
String repl="$2$1";
System.out.println(input.replaceAll(regex,repl));

解决方案 »

  1.   

    我觉得这个问题用replaceAll恐怕没法实现,正则表达式虽然强大,但也不会是无所不能,比如楼主想要把5x转成5个x,那么repl要么是"$2$2$2$2$2"要么是"xxxxx"所以还得用for来生成5个x是最适合的方案。
      

  2.   

    比如输入"5X",运行后输出5个X
    输入"3Y",运行后输出3个Y
      

  3.   

    如果用"$2$2$2$2$2"那么换一个字母怎么实现
    主要是想知道怎么能在replacement中得到regex中数字的具体值
      

  4.   


    package com.xuyisen.monitor.test;import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class Test {
        
    public static void main(String[] args) {
    String source = "aa5x2aa6y";
    String regex = "(\\d[a-zA-Z])";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(source);
    while(m.find()){
    String temp = m.group(1);
    String number = temp.substring(0, temp.length()-1);
    char letter = temp.charAt(temp.length()-1);
    String newStr = "";
    for(int i=0;i<Integer.parseInt(number);i++){
    newStr+=letter;
    }
    source = source.replace(temp, newStr);
    }
    System.out.println("替换后为:"+source);
    }
    }只能想出这方法了
      

  5.   

    用了一个额外的方法,但只想到这么多了
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class TestA {
    public static void main(String[] args){

    String input="这是什么呀?这样真的可以吗?4k真的可以呀~~~";
    Matcher m=Pattern.compile("(\\d)([a-zA-Z])").matcher(input);
    StringBuffer sbuf=new StringBuffer();
    while(m.find()){
    m.appendReplacement(sbuf, fun(Integer.parseInt(m.group(1)),m.group(2)));
    }
        m.appendTail(sbuf);
        System.out.println(sbuf);
    }
    public static String fun(int i,String s){
    String result="";
    for(int j=0;j<i;j++)
    result+=s;
    return result;
    }
    }
      

  6.   

    public class Test2 {    public static void main(String[] args) {        String str = "12abc";
            System.out.println(duplicate(str));
        }    public static String duplicate(String str) {
            if(str == null || str.length() == 0) {
                return str;
            }
            char[] chs = str.toCharArray();        int offset = 0;        // 开头的数值
            int amount = 0;        // 寻找开头的数值
            while(chs[offset] >= '0' && chs[offset] <= '9') {
                amount = amount * 10 + (chs[offset] - '0');
                offset++;
            }        // 开头没有数字或数字为 0 时返回空字符串
            if(offset == 0 || amount == 0) {
                return "";
            }        // 去开头的数字后,剩余的字符长度
            int length = chs.length - offset;        // 创建一个可以容纳 amount * length 长度的字符数组,用于重复存储字符串
            char[] cs = new char[length * amount];        // 逐一复制字符串数组
            // TODO 这里还有优化的余地,可以复制 amount / 2,再整个复制这一半等等
            for(int i = 0; i < amount; i++) {
                System.arraycopy(chs, offset, cs, length * i, length);
            }
            return new String(cs);
        }
    }
      

  7.   


    public class Array {
    /**
     * @param args
     */
    public static void main(String[] args) {
                    /**
     * 查看输入的字符串,如果含有数字和字母,输出字母的个数为数字
     * 用正则表达式找出这样的组合,然后循环打印
     */
    String str = "rt4up3dxf4il5toento6arqo5yu";
    String regex = "([a-zA-Z]*)(\\d+)([a-zA-Z])([a-zA-Z]*)";
    Matcher mm = Pattern.compile(regex).matcher(str);

    String newStr = "";
    if(mm.find(0)){
    newStr = getNewStr(newStr,mm);
    }
    while(mm.find()){
    newStr = getNewStr(newStr,mm);
    }
    System.out.println(newStr);
    } private static String getNewStr(String newStr, Matcher mm) {
    // TODO Auto-generated method stub
    newStr += mm.group(1);
    for(int i = 0;i<Integer.parseInt(mm.group(2));i++){
    newStr += mm.group(3);
    }
    newStr += mm.group(4);
    return newStr;
    }
    }