Java中想通过 replacAll 完成字符串的替换;我是这样写的 replaceAll(regex,func("$1"));问题是这样的: 运行到这里时,函数会先去调用func("$1"),以“$1”为String参数;
而我想要的效果是 先匹配,匹配出 $1 后 调用func("$1")返回一个新字符串,替换原来的字符串?请问,要实现我的功能,该怎么做?

解决方案 »

  1.   

    func 其实就是 String func(String param);replaceAll的第一个参数不是一个正则表达式吗,  表达式中()内匹配到的项是  $1,
    我现在想把这个$1作为参数  传给 func(String), 返回一个String 来替换 匹配出的内容 saying.replaceAll(" \\[\\d{1};(3\\d{1})m(.*) \\[m","<font color="+CssUtil.getColor("$1")+"$2"+"</font>");代码就是这么写的了。。
      

  2.   

    问题是 这个函数 先去调用 CssUtil.getColor("$1")了 我想的是匹配出来之后 再调用getColor的
      

  3.   

    直接一句replaceAll做不到,你这个相当于是集合运算了。用正则表达式创建个Pattern,然后得到Matcher,接着自己写个循环处理吧。
      

  4.   


    的确如此,后来用 matcher.appendReplacement  循环来替换了
      

  5.   


    Pattern p = Pattern.compile(" \\[\\d{1};(3\\d{1})m(.*) \\[m");
    Matcher m = p.matcher("123a123b");
    StringBuffer sb = new StringBuffer();
    while(m.find())
    {
    String s = m.group();
    m.appendReplacement(sb, "<font color=\""+CssUtil.getColor(s)+"\"</font>");
    }
    m.appendTail(sb);
    System.out.println(sb.toString());