我从互联网上获取文本并将数据放在" 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;我想只为这个词着色。 感谢。
答案 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()
调用移动到私有静态常量。