`
redhacker
  • 浏览: 489899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

请教appendReplacement的用法

JDK 
阅读更多
我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:
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);
			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])($|[^>])了。


十分感谢您的关注。。。
分享到:
评论
3 楼 redhacker 2014-08-06  
star65225692 写道
尊敬的作者您好:

您的"Java的appendReplacement用法指南  "文章已经被ItStrike(itstrike.cn)转载收录,我们在文章明显位置标识您的原创版权信息,如果您对转载有异议,请您联系toucao01@163.com,我们会及时回复。

感谢您提供优秀的Java文章。

您的文章地址:
http://www.itstrike.cn/Question/636cc0ae-62b9-4d64-a54d-5b821cd44cbd

ItStrike


谢谢告知!
2 楼 star65225692 2011-09-07  
尊敬的作者您好:

您的"Java的appendReplacement用法指南  "文章已经被ItStrike(itstrike.cn)转载收录,我们在文章明显位置标识您的原创版权信息,如果您对转载有异议,请您联系toucao01@163.com,我们会及时回复。

感谢您提供优秀的Java文章。

您的文章地址:
http://www.itstrike.cn/Question/636cc0ae-62b9-4d64-a54d-5b821cd44cbd

ItStrike
1 楼 redhacker 2008-07-07  
问题解决了,正确代码如下:

package com.search.test;
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(2);
			newStr = "<span style=\"color:red\">"+ oldStr +"</span>";
			startIndex = m.start(2);
			endIndex = m.end(2);	
			pre.append(str.substring(0, startIndex) + newStr);
			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, "$1<span style=\"color:red\">$2</span>$3");
    	}
    	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])($|[^>])";
		String regEx = "(^|[^</])([Nn][Bb][Aa])($|[^>])";
		StringBuffer pre = new StringBuffer();
		System.out.println(getNewStr(str,regEx,pre));
		StringBuffer pre2 = new StringBuffer();
		System.out.println(getNewStr2(str,regEx,pre2));	
	}
}

相关推荐

Global site tag (gtag.js) - Google Analytics