我想处理一段文字,替换其中的关键字为加红,现在写了下面的程序,有两个方法,都是用来处理加红效果的,然而,都没有达到预期效果,其结果如下:
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])($|[^>])了。
十分感谢您的关注。。。
分享到:
- 2008-07-04 18:06
- 浏览 2690
- 评论(3)
- 论坛回复 / 浏览 (1 / 6166)
- 查看更多
相关推荐
JSPExample5.jsp JSP页面中字符数据的简单使用 JSPExample6.jsp 结合布尔类型变量判断学生成绩等级 JSPExample7.jsp text.html页面提交至该页,并显示提交数据 text.html 页面数据提交至...
Python_ChatGLM3 series Open Bilingual Chat LLMs 开源双语对话语言模型
附件1:1名男大学生的一日食谱.xlsx
用“假定成功”思路做爆品
STC89C51单片机读取DS18B20的64位序列码并显示在1602液晶上KEIL工程文件+开发板硬件原理图 /*读取DS18B20的64位序列码并显示在1602液晶上,如果读取正确结果,则在 液晶第一行显示DS18B20 OK,第二行显示序列码,如果读取失败,则在液晶上 显示DS18B20 ERR0R PLEASE CHECK ,用户可通过更改18B20接口自己外接。 */ #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DQ = P2^2; //定义DS18B20端口DQ sbit BEEP=P2^3 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P3^5; sbit LCD_RW = P3^6; sbit LCD_EN = P3^4; uchar code cdis1[ ] = {" DS18B20 OK "}; uchar code c
实验五 进程间通信.docx
Python_使用oobabooga web的自托管github副驾驶指南
【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码.zip【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码_
JLink-Windows-V700
对象检测-使用-yolov5 这是一个基于yolov5算法检测图像中多个物体的模型
企业低代码:业务加速和应用程序现代化的杠杆-2024.pdf
随着科学技术的进步,计算机行业的迅速发展,大大提高人们的工作效率。计算机信息处理系统的引进已彻底改变了许多系统的经营管理。恒鑫租赁站长期大量出租各型钢管、扣件、塔吊等建筑施工设备。 本系统为恒鑫租赁站提供了一个方便快捷的物资管理系统,方便出租物资的管理。系统功能主要包括:用户管理,包括管理员信息查看、管理员密码修改;正常订单管理:包括新增正常订单、修改有误订单、删除错误订单;资金结算管理:费用统计;材料租赁管理:包括订单出租查询、器材回收管理、日租金管理、仓库库存管理。 本系统开发工具采用Myeclipse,数据库设计采用MySQL数据库,开发模式采用JSP为视图层的MVC设计模式。系统界面友好、美观,系统程序冗余度度低,系统具有较强的可扩展性和可维护性。
Python_RunWhen Local为Kubernetes环境提供了定制的故障排除备忘单
Python_尝试PyScript
Python_GitHub安全实验室计划提供一个内部学习体验,让学习者保护有意易受攻击的代码
STC15F2K60S2单片机+FT232RL+TLC5615(DA)+TLC0832(AD)+LCD12864屏开发板AD设计硬件(原理图+PCB)文件,硬件采用2层板设计,大小为142*100mm,Altium软件设计,包括完整地原理图及PCB文件,可供学习及设计参考。
Python_社区支持的增压版无纸化扫描索引和存档您的所有物理文档
Python_基于动作扩散的扩散策略视觉运动策略学习
Python_特定于计算机视觉的数据集、转换和模型
CAN总线学习资料总结CAN总线学习资料总结CAN总线学习资料总结CAN总线学习资料总结