我想为从列表中收到的文本赋予背景色。目前,我可以突出显示所有单词,但是我想排除单词之间的空格
最初,我尝试使用模式匹配器正则表达式解决方案,以便排除双精度空格,我将其追加到列表中。然后我意识到这个解决方案不是最好的,因为我不能排除空格。因此,我决定使用SpannableStringBuilder
并将项目附加在for循环内。但是不起作用,我只突出显示第一个单词,而不是所有单个单词(用空白(未着色)单词分隔
val spannable = SpannableStringBuilder()
val span = BackgroundColorSpan(yellowColor))
listOfUsers.forEach {
val string = it.users
spannable.append(string)
spannable.setSpan(span, 0, string.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}
textValue.text = spannable
我希望不仅看到第一个单词,而且还会看到更新的单个单词。 请注意,我知道问题出在setSpan中,我将其设置为开始0,但我不知道如何使开始工作,因此要突出显示正确的初始字符串[I]字符
答案 0 :(得分:0)
您可以创建返回Spannable的方法,如下所示:
public Spanned formatAutoSuggestText(final String autoSuggestText) {
if (autoSuggestText == null) {
return Html.fromHtml("");
}
try {
String modifiedAutoSuggestText= "" ;
final String searchText = "Text to highlight";
final Pattern pattern = Pattern.compile(StringUtils.INSENSITIVE_CASE + searchText);
final Matcher matcher = pattern.matcher(autoSuggestText);
int end = 0;
while (matcher.find()) {
final String subStringMatchFound = autoSuggestText.substring(end, matcher.end());
final String stringToBeReplaced = autoSuggestText.substring(matcher.start(), matcher.end());
final String stringToReplace = "<b><font color='" + mContext.getResources().getColor(R.color.search_autosuggest_highlighted_text) + "'>" +matcher.group()+ "</font></b>";
modifiedAutoSuggestText += subStringMatchFound.replace(stringToBeReplaced,stringToReplace);
end = matcher.end();
}
modifiedAutoSuggestText += autoSuggestText.substring(end);
return Html.fromHtml(modifiedAutoSuggestText);
}
catch (final Exception e){
return Html.fromHtml(autoSuggestText);
}
}
代码使用Java。您可以根据自己的需要进行更改。
答案 1 :(得分:0)
您可以像下面这样编写正则表达式以匹配多个空格。您也可以替换。
fun regexTest(){
val words = listOf("Hello", "Hello World1", "Hello World2",
"Hello World3", "Hello World4 ")
val pattern = "\\s+".toRegex()
words.forEach { word ->
if (pattern.containsMatchIn(word)) {
println("match ---> $word")
var temWord = word.replace("\\s+"," ")
}
}
var result:ArrayList<String> = ArrayList()
for (s in words) {
result.add(s.replace(pattern, " "))
}
for(wordToPrint in result){
println("replaced ---> $wordToPrint")
}
}
以下是上述程序的输出:
match ---> Hello World1
match ---> Hello World2
match ---> Hello World3
match ---> Hello World4
replaced ---> Hello
replaced ---> Hello World1
replaced ---> Hello World2
replaced ---> Hello World3
replaced ---> Hello World4
您可以根据需要修改正则表达式。