Kotlin字符串替换问题:将$包裹文本替换为<i>标签形式
解决Kotlin中$包裹字符串替换为标签的问题
你的代码问题在于:把所有$都替换成了<i>,然后在末尾追加</i>,这导致每个结尾的$变成了<i>,还多了一个多余的</i>,完全没实现成对替换的需求。
正确的做法是用正则表达式匹配成对的$...$结构,捕获中间内容后替换为<i>内容</i>。
修正后的代码
fun main(args: Array<String>) { val incomingString = "abc 123 \$Lorem$, \$ipsum$, \$xyz$ 547" // 正则匹配$开头结尾的内容,非贪婪模式避免跨多个$区间匹配 val finalString = incomingString.replace(Regex("\\$(.*?)\\$"), "<i>$1</i>") println(finalString) }
正则规则说明
\\$:匹配字符$(正则中$是特殊字符,需要转义;Kotlin字符串里要额外加一层反斜杠,也可以用三重引号字符串"""(\$)(.*?)\$""",无需额外转义)(.*?):非贪婪捕获组,只匹配到最近的下一个$,避免把多个$区间的内容合并成一组<i>$1</i>:用捕获到的内容($1对应捕获组的内容)替换原有的$...$结构
最终输出
abc 123 <i>Lorem</i>, <i>ipsum</i>, <i>xyz</i> 547
内容的提问来源于stack exchange,提问作者theJavaGuy
相关产品推荐
相关产品推荐

