现在的位置: 首页 > 综合 > 正文

java的appendReplacement使用指南

2011年11月17日 ⁄ 综合 ⁄ 共 2072字 ⁄ 字号 评论关闭

我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestGetNewStr {

    public static String getNewStr(String str,String regEx,StringBuffer pre) {
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        int startIndex = 0;
        int endIndex = 0;
        String oldStr = "";
        String newStr = "";
        boolean b = true;
        if (m.find()) {
            oldStr = m.group();
            newStr = "<span style=\"color:red\">"+ oldStr +"</span>";
            startIndex = m.start();
            endIndex = m.end();   
            pre.append(str.substring(0, startIndex) + newStr);2011年07月
            String temp = str.substring(endIndex);
            getNewStr(temp,regEx,pre);
            b = false;
        }
        if (b) {
            pre.append(str);
        }
        return pre.toString();
    }

    public static String getNewStr2(String str,String regEx,StringBuffer pre) {
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        while (m.find()) {
            m.appendReplacement(pre, "<span style=\"color:red\">$2</span>");
        }
        m.appendTail(pre);
        return pre.toString();
    }在美国如何进行债务追讨

    public static void main(String[] args) {
        String str = "nbasfksdNbafspandjdk<a>dksfdkspanBajfkdadd</a><span style=\"color:red\">djksnbakdspanjksjf</span>djfkspandjdfknba";
        String regEx = "(^|[^</])([Ss][Pp][Aa][Nn])($|[^>])";
        StringBuffer pre = new StringBuffer();
        System.out.println(getNewStr(str,regEx,pre));
        StringBuffer pre2 = new StringBuffer();
        System.out.println(getNewStr2(str,regEx,pre2));       
    }
}
运行结果 :

nbasfksdNba<span style="color:red">fspand</span>jdk<a>dksfd<span style="color:red">kspanB</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">dspanj</span>ksjf</span>djf<span style="color:red">kspand</span>jdfknba

nbasfksdNba<span style="color:red">span</span>jdk<a>dksfd<span style="color:red">span</span>ajfkdadd</a><span style="color:red">djksnbak<span style="color:red">span</span>ksjf</span>djf<span style="color:red">span</span>jdfknba
请问我如何做呢?因为要匹配大小写,所一我的正贼表达式写成那样了,比如,如果你搜索nba的匹配的话,那就是(^|[^</])([Nn][Bb][Aa])($|[^>])了。

抱歉!评论已关闭.