0
那是我当前的代码:的Android EditText上突出显示多个单词
public void markWords(String str) {
str = str.replace("\n", " <br>");
int spamLength = 20;
String colorSpam = "#ED9E15";
String colorBad = "red";
int i = 0;
for(String word : str.split(" ")) {
if(word.length() > spamLength) {
str = str.replace(word, "<font color='"+colorSpam+"'>"+word+"</font>");
i++;
}
}
for(String bad : blacklist) {
if (!bad.startsWith("#") && str.toLowerCase().contains(bad.toLowerCase())) {
for (String word : str.split(" ")) {
if (word.toLowerCase().contains(bad.toLowerCase())) {
String rightWord = getRightCased(word, bad);
if (word.length() > spamLength) {
str = str.replace(rightWord, "</font><font color='"+colorBad+"'>" + rightWord + "</font><font color='"+colorSpam+"'>");
} else {
str = str.replace(rightWord, "<font color='"+colorBad+"'>" + rightWord + "</font><font color='black'></font>");
}
i++;
}
}
}
}
text.setText(Html.fromHtml(str), TextView.BufferType.SPANNABLE);
String gefunden = "Es wurden " + i + " Wörter gefunden.";
if(i == 1) {
gefunden = "Es wurde " + i + " Wort gefunden.";
}
Toast msg = Toast.makeText(getApplicationContext(), gefunden, Toast.LENGTH_SHORT);
msg.show();
}
public String getRightCased(String str, String bad) {
String string = str;
for(int i = 1; i < str.length(); i++) {
if(!string.toLowerCase().startsWith(bad.toLowerCase())) {
string = string.substring(1);
}
}
for(int i = 1; i < str.length(); i++) {
if(!string.toLowerCase().endsWith(bad.toLowerCase())) {
string = string.substring(0, string.length() - 1);
}
}
return string;
}
它的工作原理是第一次,但崩溃时的文本包含HTML标记,或者一些空白空间被添加到文本,然后再次突出显示单词...我如何突出显示多个单词而不使用html标记?