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

Kotlin拆分阿拉伯字符串单词计数与Swift结果不一致如何修复

问题原因
  • Kotlin 中直接调用 split(" ") 会严格匹配单个半角空格作为分隔符,若字符串中存在连续空格、Unicode 特殊空白字符(如阿拉伯文本常见的隐形分隔符、不换行空格),会拆分出空字符串,导致计数偏多
  • 你的案例中多出的2个计数,就是拆分后产生的2个空元素,过滤后即可得到和iOS一致的49个计数
修复方案

直接将拆分逻辑替换为用正则匹配任意连续空白字符,同时过滤空结果即可,修改后的业务代码如下:

fun getColorRange(): Range<Int> { 
    
    val text =  // 此处为长字符串
    // 替换原有split逻辑
    val all = text.split("\\s+".toRegex()).filter { it.isNotEmpty() }
    val sub = (wordFrom..wordTo).map { all[it] }.joinToString(" ")
    val lower = text.indexOf(sub)
    val upper = lower + sub.length
    return Range<Int>(lower, upper)
}

如果只需要计数的话,对应代码为:

val str = getString(R.string.valueHere)
val count = str.split("\\s+".toRegex()).filter { it.isNotEmpty() }.count()
Log.d("count is " , count.toString()) // 输出49

如果遇到更复杂的多语言文本场景,可给正则添加Unicode字符类选项,确保所有类型的空白都能被正确识别:

val all = text.split("\\s+".toRegex(RegexOption.UNICODE_CHARACTER_CLASS)).filter { it.isNotEmpty() }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:09:02