You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin如何实现多个不同字符与对应字符的批量替换功能

现有实现问题说明

你当前的实现存在两处可优化点:

  1. 逻辑错误:每次replace调用都基于原始word变量执行,前面的替换结果会被后续操作覆盖,最终仅生效最后一次替换规则
  2. 效率低下:每次replace都会完整遍历一次字符串,N条替换规则就会遍历N次,批量处理时性能损耗明显

方案1:实现PHP风格的通用str_replace扩展函数

和PHP的str_replace用法完全对齐,支持任意字符串的批量替换:

// 定义String扩展函数
fun String.strReplace(search: List<String>, replace: List<String>): String {
    require(search.size == replace.size) { "搜索列表和替换列表长度必须一致" }
    var result = this
    search.forEachIndexed { index, s ->
        result = result.replace(s, replace[index])
    }
    return result
}

// 调用示例
val newWord = word.strReplace(listOf("ā", "ē", "ī", "ō", "ū"), listOf("a","e","i","o","u"))

方案2:单字符替换最优实现(你当前场景首选)

因为你需要替换的都是单个字符,该方案仅需遍历一次字符串,时间复杂度为O(n),批量处理大量单词时性能优势最明显:

// 全局预定义替换映射,无需重复创建
val charReplaceMap = mapOf(
    'ā' to 'a',
    'ē' to 'e',
    'ī' to 'i',
    'ō' to 'o',
    'ū' to 'u'
)

// 定义扩展工具函数
fun String.replaceByCharMap(map: Map<Char, Char>): String = buildString {
    this@replaceByCharMap.forEach { char ->
        append(map.getOrDefault(char, char))
    }
}

// 调用示例
val newWord = word.replaceByCharMap(charReplaceMap)

方案3:多模式正则替换(适合多字符替换场景)

如果需要替换的是长度不等的字符串,可预编译正则实现单次遍历完成所有替换,批量处理时同样高效:

// 预编译正则,仅需执行一次
val multiReplaceRegex = "(${listOf("ā", "ē", "ī", "ō", "ū").joinToString("|")})".toRegex()
// 替换映射
val strReplaceMap = mapOf(
    "ā" to "a",
    "ē" to "e",
    "ī" to "i",
    "ō" to "o",
    "ū" to "u"
)

// 调用示例
val newWord = multiReplaceRegex.replace(word) {
    strReplaceMap[it.value] ?: it.value
}

内容的提问来源于stack exchange,提问作者Sarah Multitasker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 01:54:02