我正在尝试使用正则表达式和跨度字符串将一串字符串中的两个*内的文本设置为粗体。
我正在尝试使用while循环,在该循环中我想设置我要匹配的符号(*)的索引,但我无法理解其中的逻辑,字符串中的偶数个*或无。完全没有我在recyclerview中执行此操作,这就是为什么我想保持逻辑尽可能简单的原因
val string = "*text* text text text text *text*"
val pattern = Pattern.compile("\\*")
val matcher = pattern.matcher(string)
val spannableString = SpannableString(string.replace("*", ""))
var counter = 0
val indexes = IntArray(2)
while (matcher.find()) {
if (counter <= 2) {
if (counter == 0) {
indexes[0] = matcher.start()
}
if (counter == 1) {
spannableString.setSpan(
StyleSpan(Typeface.BOLD),
indexes[0],matcher.start()-1,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
}
++counter
}
}
textView.text = spannableString
当前输出是文本文本文本文本文本文本预期的输出是文本文本文本文本文本文本
不是将matcher.find()与while循环一起使用,而是可以使用matcher.findAll()返回具有所有匹配结果的Sequence,并对其进行迭代以操作SpannableString。