Android:如果字符串包含特定字母,则从字符串着色

时间:2016-01-31 10:28:28

标签: android

我从互联网上获取文本并将数据放在" FeedItem" -class中。现在,我想查看文本是否包含" @"。所以,到目前为止我的代码是:

        // Check for empty status message
        if (!TextUtils.isEmpty(item.getStatus())) {
            if (item.getStatus().contains("@")) {
                String[] splited = item.getStatus().toString().split("\\s+");
                Spannable word = new SpannableString(item.getStatus());
                for (int i = 0; i < splited.length; i++) {
                    if (splited[i].toString().contains("@")) {

                        SpannableString s = SpannableString.valueOf(splited[i].toString());
                        s.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    }
                }
                statusMsg.setText(word);

            } else {
                statusMsg.setTextColor(R.color.black);
                statusMsg.setText(item.getStatus());
            }
            statusMsg.setVisibility(View.VISIBLE);

我使用过SpannableString和Html.fromHtml,但它并没有为我工作。 for循环为我提供了String中的每个单词。现在,如果一个单词包含&#34; @&#34;我想只为这个词着色。 感谢。

1 个答案:

答案 0 :(得分:1)

看起来您想要突出显示用户提及。我建议使用正则表达式:

if (status.contains("@")) {
    SpannableString s = SpannableString.valueOf(status);
    final Matcher matcher = Pattern.compile("[@]+[a-zA-Z0-9_.]+\\b").matcher(status);
    while (matcher.find()) {
        s.setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    statusMsg.setText(s);
}

最好是将Pattern.compile()调用移动到私有静态常量。