val segm = str.split("") // .filter { it -> it.length > 0 } println(segm)
将“Testing 1234”作为“str”,我得到“[,T,e,s,t,i,n,g,1,2,3,4,]”有了额外的过滤器,它就能工作了。但无论如何:我如何使用String.split(),以避免在result-array中出现空字符串?
prdp8dxp1#
没有这样一个内置的API可以忽略空分割,坦率地说,我看不出使用filter有什么问题。如果您不喜欢filter不必要地在拆分上循环,可以使用splitToSequence,这会产生一个惰性序列。
filter
splitToSequence
str.splitToSequence("").filter(String::isNotEmpty).toList()
或者,只删除第一个和最后一个分割-这是唯一的将是空的。
str.split("").run { subList(1, lastIndex) } // note that subList produces a "view" of the original list // it does not create a copy
如果你真的只想使用split,你可以使用一个重载,它接受一个Regex,并使用一个正则表达式,它匹配字符串中除了开始和结束之外的所有零宽度位置。
split
Regex
// this matches any position where there is no start of string (^) before it, and no end of string ($) after it str.split("(?<!^)(?!$)".toRegex())
这可能比其他方法慢得多,因为匹配正则表达式很复杂。
wvmv3b1j2#
str.split("").filterNot { it.isBlank() }
7d7tgy0s3#
你可以用空格分割字符串并连接字符串,然后你可以将结果字符串推入数组。它会工作得很好。
val str = "Testing 1234"; val segm = str.split(" ").join("") println(segm); println(segm.length)
sxpgvts34#
帧挑战:你正在做的是将字符串拆分成单个的 * 字符 * -并且有几个现有的方法可以对字符串执行此操作,例如:
asSequence()
Sequence
asIterable()
Iterable
toCharArray()
CharArray
forEach()
for (c in myString) { … }
使用其中的一个将比split ting更简单,而且可能更有效;它也会让任何人更容易阅读代码的意图。
4条答案
按热度按时间prdp8dxp1#
没有这样一个内置的API可以忽略空分割,坦率地说,我看不出使用
filter
有什么问题。如果您不喜欢
filter
不必要地在拆分上循环,可以使用splitToSequence
,这会产生一个惰性序列。或者,只删除第一个和最后一个分割-这是唯一的将是空的。
如果你真的只想使用
split
,你可以使用一个重载,它接受一个Regex
,并使用一个正则表达式,它匹配字符串中除了开始和结束之外的所有零宽度位置。这可能比其他方法慢得多,因为匹配正则表达式很复杂。
wvmv3b1j2#
7d7tgy0s3#
你可以用空格分割字符串并连接字符串,然后你可以将结果字符串推入数组。它会工作得很好。
sxpgvts34#
帧挑战:你正在做的是将字符串拆分成单个的 * 字符 * -并且有几个现有的方法可以对字符串执行此操作,例如:
asSequence()
给出Sequence
个字符。asIterable()
给出了Iterable
个字符。 (你可以对一个Iterable做很多事情,就像对一个List一样。)toCharArray()
给出了一个CharArray
。 (尽管在Kotlin中通常首选可迭代对象,因为它们更灵活,支持更好。)forEach()
在每个字符上执行给定的操作 。for (c in myString) { … }
.)使用其中的一个将比
split
ting更简单,而且可能更有效;它也会让任何人更容易阅读代码的意图。