从字符串拆分空间不工作在Kotlin
有谁想知道这个? 在kotlin中拆分SPACE(“”)是不行的,我尝试了不同的正则expression式代码,但是根本不工作。
试过这个:
value.split("\\s")[0]; value.split("\\s+")[0]; value.split("\\s++")[0];
然后我想出了解决方案 – >创建包含此函数的Java常量类,并返回字符串数组到您的kotlin类。
有没有其他的解决方案,我们可以直接实现这个问题?
解决方案:正如@Edson Menegatti所说:
科特林具体:工作
values.split("\\s".toRegex())[0]
许多人提出这个解决方案: 不工作
values.split(" ")[0]
但在我的情况下,这是行不通的 。
这是String.split
的Java和Kotlin实现之间的问题。
虽然Java实现确实接受一个正则expression式字符串,但Kotlin却没有。 为了它的工作,你需要提供一个实际的正则Regex
对象。
为此,您需要更新您的代码,如下所示:
value.split("\\s".toRegex())[0];
另外,正如@Thomas建议的那样,你可以使用常规的空格字符来分割你的字符串:
value.split(" ")[0];
最后一点,如果仅使用分割列表的第一个元素,则可能需要考虑使用first()
而不是[0]
– 以获得更好的可读性,并将limit参数设置为2,以获得更好的性能。
你需要使用:
.toRegex()
fun main(args: Array) { val str = "Kotlin com" val separate1 = str.split("\\s".toRegex())[0] println(separate1) // ------------------> Kotlin }
String#split
(实际上是CharSequence#split
)可以是正则expression式,也可以是字面解释的字符串。 所以:
value.split(" ")[0]
做你想要的。
如果您只使用第一个元素,那么也会通过limit = 2
更高效。 或者,甚至更好,使用substringBefore
。
package com.kotlination.splitstring fun main(args: Array) { val str = "Kotlination.com = Be Kotlineer - Be Simple - Be Connective" val separate1 = str.split("=|-".toRegex()) println(separate1) }
结果:
[Kotlination.com,Be Kotlineer,简单,连结]
Kotlin试图解决Java的String
库所具有的一些问题。 例如,Kotlin试图更加明确。
结果, split
方法接受一个正常的String
并且在内部不使用它作为正则expression式:
"hello world".split("\\s")[0] //no match "hello world".split(" ")[0] // => "hello"
要明确地使用实际上需要正则expression式的重载split
函数,可以使用toRegex()
扩展( inline fun String.toRegex(): Regex (source)
):
"hello world".split("\\s".toRegex())[0]// => "hello"
以下显示了Kotlin解决混淆的String::replaceAll
方法的另一个例子:
从“Kotlin in Action”的合着者Svetlana Isakova的KotlinConf 演讲中 ,