Kotlin的replace函数如何传入函数作为参数实现重复字符替换?
连续重复字符替换的Kotlin实现
你可以直接使用Kotlin正则的带转换函数的replace重载实现,和JS版本逻辑完全对齐,实现代码如下:
fun repeatedLetters(s: String): String { // 正则和JS逻辑一致,注意Kotlin字符串中反斜杠需要双重转义 return Regex("(.)(\\1+)").replace(s) { matchResult -> val char = matchResult.groupValues[1] val repeatSuffix = matchResult.groupValues[2] // 总重复次数 = 后缀长度 + 第一组的1个字符 "$char${repeatSuffix.length + 1}" } }
测试示例
fun main() { val input = "aaabccccddefff" println(repeatedLetters(input)) // 输出结果:a3bc4d2ef3 }
关键差异说明
- Kotlin普通字符串中的反斜杠需要双重转义,因此JS正则里的
\1要写成\\1 - 替换回调的入参是
MatchResult对象,捕获组内容存在groupValues列表中,索引从0开始(索引0为完整匹配串,1对应第一个捕获组,2对应第二个捕获组)
内容的提问来源于stack exchange,提问作者J F Fitch
相关产品推荐
相关产品推荐

