Java实现搜索词高亮时保留原文本大小写的问题求助
保留原文本大小写的搜索词高亮实现
你的问题出在替换时直接用了搜索词的原始大小写,而没有引用原文本中匹配到的内容。要解决这个问题,只需要利用正则表达式的反向引用,把匹配到的原文本内容保留下来即可。
修正思路
正则表达式里的$0代表整个匹配到的内容(也就是原文本中符合搜索词的那个词,保留了它原本的大小写),把替换字符串改成用$0代替硬编码的搜索词,就能实现保留原文本大小写的高亮。
另外,为了避免搜索词中包含正则特殊字符(比如.、*等)导致匹配出错,建议用Pattern.quote(term)对搜索词进行转义处理。
修正后的代码
String textToBeHighlighted = "apples and oranges"; String searchString = "APPles"; String[] searchTerms = searchString.split(" "); for (String term : searchTerms) { // 转义搜索词中的正则特殊字符,同时开启不区分大小写的匹配 String pattern = "(?i)\\b" + Pattern.quote(term) + "\\b"; // 用$0引用原文本中匹配到的内容,保留原大小写 String replacement = "<b>$0</b>"; textToBeHighlighted = textToBeHighlighted.replaceAll(pattern, replacement); } System.out.println(textToBeHighlighted);
输出结果
运行后会得到你期望的:
"<b>apples</b> and oranges"
内容的提问来源于stack exchange,提问作者Sam Donato
相关产品推荐
相关产品推荐

