2

我使用 aSpannableString来强调某些单词,但是,我意识到如果有多个单词,我的代码只会突出显示第一个单词。不完全确定如何完成突出显示多个单词:

String keyword = "test";
String text = "This is a test to underline the three test words in this test";

SpannableString output = new SpannableString(text);

if (text.indexOf(keyword) > -1)
{
    int keywordIndex = text.indexOf(keyword);
    int keywordLength = keyword.length();

    int start = keywordIndex;
    int end = keywordIndex + (keywordLength);                   

    output.setSpan(new UnderlineSpan(), start, end, 0);
}

我在想我可以split在每个空间输入文本并循环遍历它,但不确定是否有更好的方法。

我确实有这段代码可以使用正则表达式突出显示多个单词,但是,我尽量避免使用正则表达式,因为它在 Android 应用程序中,并且我在 a 中使用它,ListView而且我被告知它们非常昂贵。此外,这段代码我只突出显示了整个单词,因此使用上面的示例文本,如果句子中包含“抗议”一词,则使用此代码不会突出显示:

 Matcher matcher = Pattern.compile("\\b(?:test")\\b").matcher(text);

while (matcher.find())
{
  output.setSpan(new UnderlineSpan(), matcher.start(), matcher.end(), 0);
}
4

0 回答 0