0

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

我有两个问题:

1)它似乎不起作用。

2) 即使它可以工作,它也会受到限制,因为 fullString 可以是全部大写、全部小写或以大写字符作为单词中的第一个字符。

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"
4

2 回答 2

1

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

replace()方法不会更改String您调用它的对象;相反,它会返回一个String带有您想要替换的新对象。

您没有对replace()方法的返回值做任何事情,因此您的代码无效。您只是返回原始字符串。更改代码以返回replace()方法的结果:

return fullString.replace(textToHighlight, htmlString);

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

于 2013-10-22T22:14:49.850 回答
1

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

于 2013-10-22T22:11:55.067 回答