我是一名 Java 开发人员,尝试过 Kotlin,并发现这两种语言之间存在违反直觉的情况。
考虑 Kotlin 中的给定代码:
"???".split("") # gives ["", "?", "?", "?", ""]
Run Code Online (Sandbox Code Playgroud)
Java 中也是如此:
"???".split("") # gives ["?", "?", "?"]
Run Code Online (Sandbox Code Playgroud)
为什么 Kotlin 在结果数组中产生前导和尾随空格字符串?或者Java总是删除这些空字符串,而我只是没有意识到这一点?
我知道toCharArray()每个 Kotlin 上都有这个方法String,但它仍然不是很直观(也许 Java 开发人员应该放弃 Java 的旧习惯,他们希望在新语言中重用这些习惯?)。
这是因为 Javasplit(String regex)方法显式删除了它们:
此方法的工作方式类似于使用给定表达式和零限制参数调用双参数 split 方法。因此,尾随空字符串不包含在结果数组中。
split(String regex, int limit)提到:
当该字符串的开头存在正宽度匹配时,则在结果数组的开头包含一个空的前导子字符串。然而,开头的零宽度匹配永远不会产生这样的空前导子字符串。
""是零宽度匹配。不知道为什么你认为toCharArray()这里不直观,用空字符串分割来迭代所有字符是一种迂回的做事方式。split()旨在进行模式匹配并获取字符串组。
PS:我检查了 JDK 8、11 和 17,现在行为似乎已经一致了一段时间。
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |