首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

对于文本替换

2011-12-26 
关于文本替换有这样一段字符串(html代码):p这是一篇文章,用来介绍金庸先生的一本B名著天龙八部/B。天

关于文本替换
有这样一段字符串(html代码):

<p>
  这是一篇文章,用来介绍金庸先生的一本<B>名著天龙八部</B>。天龙八部是金庸先生的一部著名唱片武侠小说……,天龙八部人物关系复杂……。
</p>


我需要做以下处理:

判断这段文字第一次出现“天龙八部”时,这四个是否处于<B></B>标记中,如果不处于则给这四个加上<B></B>标签;如果处于(上面例子就处于),则去判断第二次出现的地方是否处于<B></B>标记中……以此类推

给介绍一下怎么写效率最高。多谢~

[解决办法]

Java code
public static void main(String[] args) {        String str1 = "<p>这是一篇文章,用来介绍金庸先生的一本<B>名著天龙八部</B>。天龙八部是金庸先生的一部著名唱片武侠小说……,天龙八部人物关系复杂……。</p>";        List<String> lists = new ArrayList<String>();        Pattern p = Pattern.compile("<B>.*?</B>");        Matcher m = p.matcher(str1);        while(m.find()){            String tmp = m.group();            lists.add(tmp);            str1 = str1.replaceFirst("<B>.*?</B>", "---");        }        str1 = str1.replaceAll("天龙八部", "<B>天龙八部</B>");        for(String ele:lists){            str1 = str1.replaceFirst("---", ele);        }        System.out.println(str1);    }
[解决办法]
for example
Java code
String s = "<p>这是一篇文章,用来介绍金庸先生的一本<B>名著天龙八部</B>。天龙八部是金庸先生的一部著名唱片武侠小说……,天龙八部人物关系复杂……。</p>";String keyword = "天龙八部";boolean ok = false;Pattern p = Pattern.compile("(?i)<b>(.*?)</b>");Matcher m = p.matcher(s);List<int[]> list = new ArrayList<int[]>();while (m.find()) {    if (m.group(0).contains(keyword)) {        list.add(new int[]{m.start(), m.end()});    }    if (keyword.equals(m.group(1))) {        ok = true;        break;    }}if (! ok) {    int index = s.indexOf(keyword);    while (index >= 0) {        ok = true;        for (int[] idx : list) {            if (index > idx[0] && index < idx[1]) {                ok = false;            }        }        if (ok) {            s = s.substring(0, index-1) + "<B>" + keyword + "</B>" + s.substring(index+keyword.length());            break;        }        index = s.indexOf(keyword, index+1);    }}System.out.println(s); 

热点排行