`
redhacker
  • 浏览: 494319 次
  • 性别: 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));	
	}
}

相关推荐

    操作 compile 解析编译模式,第二个参数大小写是否敏感

    使用 `appendReplacement` 方法来替换匹配到的字符串,并将结果追加到 `StringBuffer` 对象 `buf` 中。这样可以有效地构建新的字符串,其中原始字符串中的匹配项被替换为 "java" 或 "JAVA"。 5. **尾部追加**: `...

    正则表达式

    而`appendReplacement()`和`appendTail()`方法则允许更复杂的替换逻辑,其中`appendReplacement()`会替换找到的匹配项,`appendTail()`则会添加未匹配的剩余文本。 #### 示例:简单的单词替换 下面的代码展示了...

    过滤以<开头以>结尾的标签(txt 简写)

    #### 3.2 appendReplacement()方法 此方法用于将匹配的结果替换为指定的字符串。在本例中,我们将匹配到的所有标签都替换为空字符串: ```java while (result1) { matcher.appendReplacement(sb, ""); result1 =...

    String.replaceAll方法详析(正则妙用)

    `Matcher.replaceAll` 内部使用 `appendReplacement` 方法逐步构建新的字符串,每次找到匹配项时,都会用替换字符串替换之。 `Matcher.appendReplacement` 方法的 `replacement` 参数支持使用 `$` 符号来引用匹配的...

    java正则表达式替换字符串

    在`while (m.find())`循环中,我们使用`Matcher`的`appendReplacement()`方法将所有匹配到的模式替换为`"&lt;input&gt;"`。需要注意的是,这个方法只会在当前匹配上操作,并不会直接修改原始字符串。因此,在所有的匹配...

    java正则表达式Pattern,Matcher

    ### Java正则表达式Pattern与Matcher详解 #### 一、Java正则表达式的概述 在Java编程语言中,正则表达式(Regular Expression)是一种强大的文本...理解并熟练掌握它们的使用方法对于处理复杂的文本数据至关重要。

    计算机网络系统

    此外,Matcher还提供了groupCount()、replaceAll()、replaceFirst()、appendReplacement()、appendTail()、group(n)等方法用于捕获组匹配、替换和追加匹配字符串。 文档提到的实例教程部分,通过具体的例子演示了...

    java web笔试题,很全

    这段代码首先定义了一个正则表达式,用于匹配`[名称]{数值}`的模式,然后使用`Matcher`的`find`方法查找所有匹配项,并使用`appendReplacement`方法替换为指定格式。 最后,关于异常处理。在给出的两个代码片段中,...

    java正则表达式过滤html标签

    5. **添加剩余文本**:使用`Matcher`对象的`appendTail()`方法将未被匹配的部分添加到结果中。 6. **返回结果**:返回过滤后的字符串。 #### 三、高级过滤 在实际应用中,可能还需要对某些特定的HTML标签进行更...

    怎么利用Java正则表达式换模板

    如果模板中包含动态内容,可以使用预编译的正则表达式和`Matcher`的`appendReplacement()`和`appendTail()`方法,结合`StringBuilder`进行复杂替换。这种方式适用于替换过程涉及多个步骤或者需要在替换时执行额外...

    正则表达式简单课程学习

    根据提供的文件信息,我们可以从中提炼出关于正则表达式的相关知识点。尽管原文中存在大量乱码及不清晰的部分,...掌握正则表达式的基本语法和使用方法对于从事软件开发、数据分析等领域的人来说是极其重要的技能之一。

    java_正则表达式pattern类Matcher类_(字符串匹配)

    通过`find()`循环查找并使用`appendReplacement()`将找到的"no"替换为"yes",最后用`appendTail()`添加剩余的未处理部分到`StringBuffer`,最终打印出替换后的字符串。 这些方法的组合使用使得在Java中进行复杂的...

    java正则表达式语法

    `Matcher`提供了`replaceAll()`、`replaceFirst()`和`appendReplacement()`方法来进行字符串替换。`replaceAll()`替换所有匹配项,`replaceFirst()`只替换第一个匹配项,`appendReplacement()`用于构建新的字符串。...

    Java基于正则表达式实现的替换匹配文本功能【经典实例】

    除了`replaceAll()`,我们还可以使用`Matcher`的`find()`方法和`appendReplacement()`方法来逐个处理匹配项。`find()`方法会查找下一个匹配的子串,而`appendReplacement()`方法会将当前匹配前的文本复制到`...

    JAVA正则表达式实例教程.pdf

    在这篇实例教程中,我们将深入理解Java正则表达式的核心概念、优势、使用方法以及常见符号和实例。 1. **正则表达式基本概念** - **定义**:正则表达式(Regular Expression,简称regex)是一种模式,用于在字符串...

    javascript 正则表达式

    Matcher对象的`find()`方法可以用来查找匹配项,而`appendReplacement()`和`appendTail()`方法则用于替换操作。`replaceAll()`和`replaceFirst()`是String对象的方法,它们直接对整个字符串进行全局替换或只替换第...

    wap代码 html过滤器(java)

    4. **最终的字符串构建与返回**:经过一系列的转换和处理后,使用`Matcher`的`appendReplacement`和`appendTail`方法将修改后的标签插入到`StringBuffer`对象中,最后将该缓冲区转换为字符串并返回。 #### 使用场景...

Global site tag (gtag.js) - Google Analytics