如何使用String.split()拆分字符串为单字符且避免空字符串?
解决String.split("")生成空字符串的问题
当执行以下Kotlin代码,传入字符串"Testing 1234"时:
val segm = str.split("") // .filter { it -> it.length > 0 } println(segm)
得到的结果会包含首尾空字符串:[, T, e, s, t, i, n, g, , 1, 2, 3, 4, ]。如果不想通过后续filter操作去除空串,可以直接借助正则表达式调用split方法实现:
val segm = str.split("(?=.)".toRegex())
这样拆分后得到的结果是[T, e, s, t, i, n, g, , 1, 2, 3, 4],完全没有空字符串。
原理说明:正则表达式(?=.)是正向前瞻断言,它仅匹配后面紧跟一个字符的空位置。这样拆分时只会在每个字符的前侧位置进行分割,不会匹配字符串开头的空位置,自然也就不会生成首尾的空串。
如果你的需求是将字符串拆分为单个字符的集合,还有更简洁的替代方式:
val segm = str.toList().map { it.toString() }
这行代码会直接将字符串转换为单个字符的列表,同样能得到预期结果。
内容的提问来源于stack exchange,提问作者cluster1
相关产品推荐
相关产品推荐

