保留大小写,替换不敏感的子串

时间:2013-10-22 22:03:50

标签: java android string replace

我需要在Android的ListView中突出显示TextView并查看at CommonsWare response here我决定使用.setText(Html.fromHtml(htmlString)方法。 所以在我的适配器中我有这个formatString()方法。

我遇到了两个问题:

1)它似乎无法发挥作用。

2)即使它可以工作,也会受到限制,因为fullString可以是所有的UpperCase,所有的LowerCase或者是一个大写字母char作为单词中的第一个字符。

textToHighlight只会出现在fullString中的单词的开头。

private String formatString(String textToHighlight, String fullString) {
        if (textToHighlight== null || textToHighlight.equals("")) {
            return fullString;
        }
        String colore = "\"#0099CC\"";

        String htmlSubString = "<font color=" + colore + ">"
                + textToHighlight+ "!</font>";

        fullString.replace(textToHighlight, htmlString);

        return fullString;
    }

输出应为:

a) formatString("ca", "Cake Maccaroni") = "<font color=\"#0099CC\">Ca</font>ke Maccaroni"
b) formatString("ca", "CAKE MACCARONI") = "<font color=\"#0099CC\">CA</font>KE MACCARONI"
c) formatString("ca", "Maccaroni Cake") = "Maccaroni <font color=\"#0099CC\">Ca</font>ke"
d) formatString("ca", "MACCARONI CAKE") = "MACCARONI <font color=\"#0099CC\">CA</font>KE"
e) formatString("ca", "cake maccaroni") = "<font color=\"#0099CC\">ca</font>ke maccaroni"

2 个答案:

答案 0 :(得分:1)

如果要使用,必须将fullString.replace(textToHighlight, htmlString);方法的结果分配给值。 return fullString.replace(textToHighlight, htmlString);应解决第一个问题。

答案 1 :(得分:1)

String个对象是不可变的。这意味着一旦String对象初始化,就无法改变它的内容。

replace()方法不会更改您调用它的String对象;相反,它返回一个新的String对象,其中包含您想要执行的替换。

您没有使用replace()方法的返回值执行任何操作,因此您的代码无效。你刚刚返回原始字符串。更改代码以返回replace()方法的结果:

return fullString.replace(textToHighlight, htmlString);

要解决您的其他问题,您需要使方法更加复杂。你可以使用replaceFirst()而不是replace()来做到这一点,textToHighlight将正则表达式作为第一个参数(而不是普通字符串)。您必须从{{1}}和您的要求中仔细构建正则表达式。