从字符串拆分空间不工作在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 演讲中 ,