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
相关产品推荐
相关产品推荐

