2

特定の単語に下線を引くために a を使用してSpannableStringいますが、複数の単語がある場合、コードが最初の単語のみを強調表示することに気付きました。複数の単語を強調表示する方法が正確にわかりません:

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 アプリにあり、で使用しているため、正規表現を避けようとして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