Kotlin中使用"\\s".toRegex()拆分字符串不生效的原因是什么
问题解答
\\s 正则本身的匹配规则是单个空白字符,单次仅匹配1个空格、制表符、换行符等空白类字符。你测试用的字符串里test1和test2之间有4个连续空格、test2和test3之间有3个连续空格,用\\s拆分时,每一个独立的空格都会被识别为一个分隔符,连续N个空格就会生成N-1个空字符串的拆分结果,最终条目数自然会超过3个。
举个简单的例子:对字符串"a b"(两个空格间隔)用"\\s".toRegex()拆分,得到的结果会是["a", "", "b"],多余的空条目就是连续空格被逐一切割带来的。
你更换的" +"正则逻辑完全不同:+是正则量词,代表匹配前面的规则1次及以上,所以" +"会把连续的任意多个空格当做一个整体分隔符处理,不管中间有多少个连续空格都只会切割一次,不会生成多余空条目,自然能得到你预期的3个拆分结果。
如果需要兼容混合了制表符、换行等其他空白类型的场景,也可以用"\\s+".toRegex()做拆分,效果和" +"一致但覆盖的空白类型更全。
内容的提问来源于stack exchange,提问作者Ganesh Hegde
相关产品推荐
相关产品推荐

