替换字符串中出现的所有单词但保留原始单词的大小写

时间:2013-10-16 15:58:42

标签: java html string replace jsoup

我正在为项目添加搜索功能。当输入搜索词时,我的程序循环一个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();

3 个答案:

答案 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