问题描述:最近在搭建一个开源平台网站,在做一个简单搜索的功能,需要将搜索到的结果中被匹配的字符串添加不一样的颜色,但是又不破坏被匹配的字符串。
使用的方法是替换被匹配的字符串加上font标签。但是搜索出来的英文结果却没有那么理想。
原因分析:数据库查询使用like的时候是不区分大小写的,而java替换字符串时是区分大小写的,因此搜索出来的结果好多都没有加上font标签。
解决方法:使用强大的正则表达式。java中操作正则表达式的包为java.util.regex 包,主要由三个类所组成:Pattern、Matcher 和 PatternSyntaxException。
1、首先需要找到要被匹配的字符串,并且不区分大小写
代码:
1 Pattern pattern =Pattern.compile(regex, Pattern.CASE_INSENSITIVE);2 Matcher matcher = pattern.matcher(str);
2、然后使用find方法,查找字符串的起始位置。
代码:
1 while(matcher.find()) {2
3 String match = str.substring(matcher.start() +len, matcher.end()4
5 +len);6 str = str.replaceFirst(match, "" + match+ "");7 len = len +s.length();8 }
最后的代码:
packagetest2;importjava.util.regex.Matcher;importjava.util.regex.Pattern;public classTest {/*** 不区分大小写匹配字符串
* 并将被匹配字符串中的字符串加上一些东西 。
* 保持被匹配字符串中的字符串不变
*
*@paramargs*/
public static voidmain(String[] args) {
String str= "Java JAva JAVA JavA";
String regex= "JAva";//保存你要添加的html代码的长度
int len = 0;
String s= "";//不区分大小写匹配字符串
Pattern pattern =Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(str);//循环查找,可能匹配到的不止一个字符串
while(matcher.find()) {//截取字符串,临时保存匹配到的字符串//起始位置和结束位置都要加一个len长度
String match = str.substring(matcher.start() +len, matcher.end()+len);//替换首次找到的字符串
str = str.replaceFirst(match, "" +match+ "");//len需要加上s长度
len = len +s.length();
}
System.out.println(str);
}
}
程序运行结果:
Java JAva JAVA JavA
有什么更好的处理办法请留言推荐,谢谢