Kotlin中字符串按空格分割失效问题求助
在Kotlin中解决空格分割字符串无效的问题
兄弟,我完全懂你遇到的这个糟心问题!之前我也试过各种正则写法,结果在Kotlin里就是不生效,差点就像你一样用Java类来绕路了😅
为啥直接用split(" ")或者split("\\s")没效果?
- Kotlin的
split(String)方法是按字面量精确匹配的,不会把传入的字符串解析成正则表达式。所以你写的split("\\s")其实是在匹配\s这两个字符,而不是正则中代表空白字符的\s,自然起不到分割空白的作用。 - 至于
split(" "),它只会匹配单个普通空格,要是你的字符串里有连续空格、制表符(\t)、换行符或者全角空格这类非普通空白字符,它就完全达不到你想要的分割效果,甚至会分割出一堆空字符串元素。
纯Kotlin的完美解决方案
不用再依赖Java类了,直接用Kotlin的正则相关API就能轻松解决:
- 匹配任意空白字符(空格、制表符、换行等):
value.split("\\s".toRegex())[0] - 匹配一个或多个连续空白字符(避免分割后出现空字符串,这也是最常用的场景):
value.split("\\s+".toRegex())[0] - 如果处理的是长字符串,推荐用
splitToSequence,它采用懒加载模式,性能更优:value.splitToSequence("\\s+".toRegex()).first()
你提到的values.split("\\s".toRegex())[0]确实是Kotlin专属的可行方案,而split(" ")在你这里失效,大概率是因为目标字符串里存在非普通空格的空白字符,或者连续多个空格,导致字面量匹配无法生效。
内容的提问来源于stack exchange,提问作者Harsh Patel
相关产品推荐
相关产品推荐

