如果我们有一个val txt: kotlin.String = "1;2;3;"
,并且想要将其拆分成一个数字数组,我们可以try 以下操作:
val numbers = string.split(";".toRegex())
//gives: [1, 2, 3, ]
结果CharSequence.split
中包括尾部空String
.
另一方面,如果我们看看Java String
,结果是不同的:
val numbers2 = (string as java.lang.String).split(";")
//gives: [1, 2, 3]
这一次,使用java.lang.String.split
,结果不包括尾随的空String
.此行为实际上是为给定相应的JavaDoc而设计的:
This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.
然而,在Kotlin的版本中,0
也是默认的limit
参数,如文档here所示,但在Kotlin内部,当java.util.regex.Pattern::split
为called时,0
将映射为负值-1
:
nativePattern.split(input, if (limit == 0) -1 else limit).asList()
它似乎在按预期工作,但我想知道为什么该语言似乎在限制Java API,因为不再提供0
的限制.