我试图通过用<b>kw</b>
usingreplaceAll()
方法替换每个关键字来使搜索关键字在结果标题中加粗。还需要忽略关键字中的任何特殊字符以进行突出显示。这是我正在使用的代码,但它在第二遍中双重替换了粗体指令。我正在寻找一个优雅的正则表达式解决方案,因为我的替代方案变得太大而没有涵盖所有情况。例如,使用此输入:
addHighLight("a b", "abacus")
...我得到这个结果:
<<b>b</b>>a</<b>b</b>><b>b</b><<b>b</b>>a</<b>b</b>>cus
public static String addHighLight(String kw, String text) {
String highlighted = text;
if (kw != null && !kw.trim().isEmpty()) {
List<String> tokens = Arrays.asList(kw.split("[^\\p{L}\\p{N}]+"));
for(String token: tokens) {
try {
highlighted = highlighted.replaceAll("(?i)(" + token + ")", "<b>$1</b>");
} catch ( Exception e) {
e.printStackTrace();
}
}
}
return highlighted;
}