テキストビューがあり、 @ で始まる単語の色を赤色に変更したいのですが、 # の単語もある場合は黒色に変更したいと考えています。テキストはハードコーディングされていません。これを行うにはどうすればよいですか。助けてください。以下のコードで試しましたが、問題は最初の単語にのみ赤い色が適用されることです。
String MsgTitle = Details.get(position).getContent();
String refString;
String hashString;
if (MsgTitle.contains(" ")) {
refString = MsgTitle.substring(0,
MsgTitle.indexOf(' ')).trim();
if (String.valueOf(refString.charAt(0)).equals("@")) {
refString = refString.replaceFirst("(^@\\w+)",
"<font color='#8A0A0A'>$1</font>");
} else {
refString = refString.replaceAll("(#\\w+)",
"<font color='#000000'><b>$1</b></font>");
}
hashString = MsgTitle.substring(
MsgTitle.indexOf(' ') + 1).trim();
((TextView) vi.findViewById(R.id.textData))
.setText(Html.fromHtml(refString
+ " "
+ hashString
.replaceAll("(#\\w+)",
"<font color='#000000'><b>$1</b></font>")));
}
私の問題への回答
tring[] str_array = str .split(" ");
boolean isExists = false;
for (int i = 0; i < str_array.length; i++) {
for (int j = 0; j < i; j++) {
if (str_array[j].equals(str_array[i])) {
isExists = true;
}
}
if (str_array[i].startsWith("@") && !isExists) {
str = str .replace(str_array[i],
"<font color='#8A0A0A'>" + str_array[i]
+ "</font>");
} else if (str_array[i].contains("#")) {
str = str .replaceAll(str_array[i],
"<font color='#000000'><b>" + str_array[i]
+ "</b></font>");
}
}