zoukankan      html  css  js  c++  java
  • java的appendReplacement使用指南

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

    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])($|[^>])了。

  • 相关阅读:
    hdu 5007 水题 (2014西安网赛A题)
    hdu 1698 线段树(成段替换 区间求和)
    poj 3468 线段树 成段增减 区间求和
    hdu 2795 公告板 (单点最值)
    UVaLive 6833 Miscalculation (表达式计算)
    UVaLive 6832 Bit String Reordering (模拟)
    CodeForces 124C Prime Permutation (数论+贪心)
    SPOJ BALNUM (数位DP)
    CodeForces 628D Magic Numbers (数位DP)
    POJ 3252 Round Numbers (数位DP)
  • 原文地址:https://www.cnblogs.com/sky7034/p/2169465.html
Copyright © 2011-2022 走看看