我正在为项目添加搜索功能。当输入搜索词时,我的程序循环一个html字符串,并用span标记包围的搜索词替换所有出现的词。 replaceAll()方法替换了单词,但它不完全是我想要做的。我不知道如何保持原字的情况。例如,如果我搜索'hello':'Hello'变成'hello','HELLO'变成'hello'。为了解析html,我正在使用jsoup。
Document doc = Jsoup.parse(content);
Elements elemenets = doc.body().getAllElements();
for (int i = 1; i < elemenets.size(); i++) {
String elementText = elemenets.get(i).text();
if (elementText.toLowerCase().contains(search_term.toLowerCase())) {
elemenets.get(i).html(elemenets.get(i).html().replaceAll("(?i)" + search_term, "<span id = 'first' style ='background-color:#fbaf5d;'>" + search_term + "</span>"));
}
}
String result = doc.toString();
答案 0 :(得分:1)
你试过使用一些正则表达式吗? 看看有关同一问题的这个问题 Use Java and RegEx to convert casing in a string
我希望它能帮到你
答案 1 :(得分:1)
搞定了。我需要使用regEx并将replaceAll的第二个参数中的search_term替换为$ 1。 RegEx对我来说仍然有点神秘。感谢大家的帮助!
elemenets.get(i).html(elemenets.get(i).html().replaceAll("(?i)(" + search_term + ")", "<span>$1</span>"));
答案 2 :(得分:-1)
只需使用Apache string utils来执行此操作,您的if条件将为:
if (elementText.containsIgnoreCase(search_term))
请注意,您必须导入org.apache.commons.lang3.StringUtils.containsIgnoreCase