使用SpannableStringBuilder多次设置模式

3

我有一段使用SpannableStringBuilder的代码。但是我的主字符串中有很多模式。使用这些代码,我只能更改最后找到的模式。这是我的代码:

final Pattern ptn = Pattern.compile("java"); // i have 9 "java" in my string
    final Matcher matcher = ptn.matcher(getString(R.string.test2));
    final SpannableStringBuilder spannable = new SpannableStringBuilder(getString(R.string.test));
    final ForegroundColorSpan span = new ForegroundColorSpan(Color.GREEN);
    while (matcher.find()) {
        spannable.setSpan(span, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    txtView.setText(spannable);

我不知道我的问题在哪里?

是的,为每个matcher.find()迭代创建一个新的span。 - pskink
你测试过 while 循环执行了多少次了吗,它是否>1? - starkshang
是的,while循环也会重复9次,就像我的模式@FireSun一样。 - Beppe
谢谢@pskink,它运行得很好。 - Beppe
1个回答

7
尝试为每个循环创建span,像这样:
final Pattern ptn = Pattern.compile("java"); // i have 9 "java" in my string
final Matcher matcher = ptn.matcher(getString(R.string.test2));
final SpannableStringBuilder spannable = new SpannableStringBuilder(getString(R.string.test));

while (matcher.find()) {
    final ForegroundColorSpan span = new ForegroundColorSpan(Color.GREEN);
    spannable.setSpan(span, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
txtView.setText(spannable);

谢谢@FireSun。非常好。 - Beppe
@starkshang 那么对于20k+个字符串怎么办?它的运行速度非常慢。 - Acuna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接