java - 如何在 android 中使用带有正则表达式的 SpannableString?

标签 java android regex

我正在尝试使用此函数在 Android 中使用 spannableString 和正则表达式为字符串的一部分着色:

public static String StringReplace(String source) {
        String find = "ABC";
        SpannableString replace = new SpannableString(find);        
        replace.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

        String output = source.replace(find, replace);
        return  output;
    }

因为函数 replace() 返回一个字符串,所以我无法获得彩色字符串。我的问题是:使用正则表达式为部分文本着色的最佳方法是什么?

最佳答案

9 月 10 日更新 - 更改所有出现的目标字符串

像这样通用的东西会起作用:

public class SpanTest extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String dispStr = "This has the string ABCDEF in it \nSo does this :ABCDEF - see!\nAnd again ABCD here";
        TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(dispStr);
        changeTextinView(tv, "ABC", Color.RED);
    }

    private void changeTextinView(TextView tv, String target, int colour) {
        String vString = (String) tv.getText();
        int startSpan = 0, endSpan = 0;
        Spannable spanRange = new SpannableString(vString);

        while (true) {
            startSpan = vString.indexOf(target, endSpan);
            ForegroundColorSpan foreColour = new ForegroundColorSpan(colour);
            // Need a NEW span object every loop, else it just moves the span
            if (startSpan < 0)
                break;
            endSpan = startSpan + target.length();
            spanRange.setSpan(foreColour, startSpan, endSpan,
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        tv.setText(spanRange);
    }

}

.

关于java - 如何在 android 中使用带有正则表达式的 SpannableString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7364119/

相关文章:

java - Android Java 如果两次之间的时间错误

android - 在 'wheel' 中排列应用程序图标

php - 如何从已序列化的数组中删除特定的子数组?

javascript - Windows 路径字符串的正则表达式

java - Apache Commons BeanUtilsBean - 从 describe() 中排除属性

java - Firebase 远程配置无法在 OnComplete 中获取控制台值

java - 更新数据时发生事务错误

java - 如何用java构建贝叶斯信念网络?有图书馆吗? API?

java - 如何处理来自 sharedpreferences getStringSet 的数据?

c# - REGEX 删除被 < pikes > 包围的字符串