不区分大小写匹配字符串,并在不改变被匹配字符串的前提下添加html标签

本文介绍了如何在搭建的开源平台网站上实现简单搜索功能,重点在于将搜索结果中匹配的字符串以不同颜色显示,同时解决了数据库查询与字符串替换时的大小写不匹配问题。通过使用正则表达式,实现了不区分大小写的匹配,并在匹配到的字符串前添加HTML样式。最后提供了示例代码和运行结果,详细说明了整个过程。

问题描述:最近在搭建一个开源平台网站,在做一个简单搜索的功能,需要将搜索到的结果中被匹配的字符串添加不一样的颜色,但是又不破坏被匹配的字符串。

             使用的方法是替换被匹配的字符串加上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, "<font color='red'>" + match+ "</font>");
7                             len = len + s.length();
8                      }

 

最后的代码:

            

package test2;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
/**
* 不区分大小写匹配字符串 
* 并将被匹配字符串中的字符串加上一些东西 。 
* 保持被匹配字符串中的字符串不变
* 
* @param args
*/
public static void main(String[] args) {
String str = "Java JAva JAVA JavA";
String regex = "JAva";
//保存你要添加的html代码的长度
int len = 0;
String s = "<font color='red'></font>";
//不区分大小写匹配字符串
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, "<font color='red'>" + match
+ "</font>");
//len需要加上s长度
len = len + s.length();
}
System.out.println(str);
}
}

 

程序运行结果:

<font color='red'>Java</font> <font color='red'>JAva</font> <font color='red'>JAVA</font> <font color='red'>JavA</font>

有什么更好的处理办法请留言推荐,谢谢

              

转载于:https://www.cnblogs.com/bruceliang/p/3648687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值