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

如何使用指定多字符Unicode分隔符拆分字符串并保留分隔符?

解决印地语字符串按指定多字符分隔符拆分并保留分隔符的问题

需求说明

将字符串「क्षत्रिय」使用多字符分隔符列表 listOf("श्र","क्ष","त्र","ज्ञ") 拆分,最终得到结果 ["क्ष", "त्र", "ि", "य"],要求保留匹配到的分隔符,且分隔符为多字符组合而非单个字符。

核心思路

  1. 优先最长匹配:将分隔符按长度降序排序(当前案例中所有分隔符长度一致,若存在更长分隔符可确保优先匹配),避免短分隔符提前匹配导致错误结果。
  2. 逐位扫描匹配:从字符串起始位置开始,逐个位置尝试匹配分隔符:
    • 匹配成功则将该分隔符加入结果集,指针跳过分隔符对应的长度;
    • 匹配失败则取当前单个字符加入结果集,指针向后移动1位;
  3. 重复上述步骤直到遍历完整个字符串。

Kotlin 实现代码

fun splitWithMultiCharDelimiters(input: String, delimiters: List<String>): List<String> {
    val result = mutableListOf<String>()
    // 按分隔符长度降序排序,优先匹配更长的分隔符
    val sortedDelimiters = delimiters.sortedByDescending { it.length }
    var currentIndex = 0

    while (currentIndex < input.length) {
        var matched = false
        // 尝试匹配每个分隔符
        for (delimiter in sortedDelimiters) {
            val delimiterLen = delimiter.length
            if (currentIndex + delimiterLen <= input.length && 
                input.substring(currentIndex, currentIndex + delimiterLen) == delimiter) {
                result.add(delimiter)
                currentIndex += delimiterLen
                matched = true
                break
            }
        }
        // 未匹配到分隔符,取单个字符加入结果
        if (!matched) {
            result.add(input.substring(currentIndex, currentIndex + 1))
            currentIndex += 1
        }
    }
    return result
}

// 测试示例
fun main() {
    val targetString = "क्षत्रिय"
    val delimiters = listOf("श्र","क्ष","त्र","ज्ञ")
    val splitResult = splitWithMultiCharDelimiters(targetString, delimiters)
    println(splitResult) // 输出: [क्ष, त्र, ि, य]
}

结果验证

运行上述代码后,输入字符串「क्षत्रिय」会被依次处理:

  • 起始位置匹配到分隔符「क्ष」,加入结果;
  • 指针移动至第3位(索引2),匹配到分隔符「त्र」,加入结果;
  • 剩余字符「ि」和「य」均不匹配任何分隔符,逐个加入结果;
    最终得到目标拆分结果 ["क्ष", "त्र", "ि", "य"]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:46:39