从字符串中拆分 space 在 Kotlin 中不起作用

Split space from string not working in Kotlin

有人想知道吗?在 kotlin 中拆分 SPACE (" ") 不起作用,我尝试使用不同的正则表达式代码但根本不起作用。

试过这个:

value.split("\s")[0];
value.split("\s+")[0];
value.split("\s++")[0];

然后我想出了解决方案 -> 创建 java 常量 class 其中包含这个函数和 returns 字符串数组到你的 kotlin class.

对于这个问题有没有其他的解决方案,我们可以直接实现这个东西?

解决方案: 正如@Edson Menegatti 所说:

KOTLIN 特定:工作

values.split("\s".toRegex())[0]

许多人提出了这个解决方案:不工作

values.split(" ")[0] 

但我的情况是不工作

String#split(实际上是 CharSequence#split)可以采用正则表达式,或者只是按字面解释的字符串。所以:

value.split(" ")[0]

做你想做的。

如果您只使用第一个元素,则同时传递 limit = 2 会更有效。或者,更好的是,使用 substringBefore.

Java 和 String.split 的 Kotlin 实现之间存在一个问题。

虽然 Java 实现确实接受正则表达式字符串,但 Kotlin 实现不接受。要使其正常工作,您需要提供一个实际的 Regex 对象。

为此,您需要按如下方式更新代码:

value.split("\s".toRegex())[0]

此外,正如@Thomas 所建议的,您可以使用常规 space 字符将字符串拆分为:

value.split(" ")[0]

最后一点,如果您只使用拆分列表的第一个元素,您可能需要考虑使用 first() 而不是 [0] - 为了更好的可读性 - 并设置限制参数到 2 - 为了更好的性能。

您需要使用:

.toRegex()

fun main(args: Array<String>) {
        val str = "Kotlin com"

        val separate1 = str.split("\s".toRegex())[0]
        println(separate1) // ------------------> Kotlin
}

您也可以使用.split(" ")[0]来获得结果。喜欢

fun main(args: Array<String>) {
            val str = "Kotlin com"

            val separate1 = str.split(" ")[0]
            println(separate1) // ----------> Kotlin
}

Kotlin 试图解决 Java 的 String 库存在的一些问题。例如,Kotlin 试图更加明确。

因此,split 方法采用普通的 String 并且在内部不将其用作正则表达式:

"hello world".split("\s")[0] //no match
"hello world".split(" ")[0] // => "hello"

要明确使用实际采用正则表达式的重载 split 函数,可以使用 toRegex() 扩展 (inline fun String.toRegex(): Regex (source)):

"hello world".split("\s".toRegex())[0]// => "hello"

下面是 Kotlin 解决令人困惑的 String::replaceAll 方法的另一个例子:

摘自 KotlinConf presentation of Svetlana Isakova,“Kotlin in Action”的合著者

单分隔符

 val splittedStringList = "123.345-80A".split(".")
 println(splittedStringList[0])

几个分隔符

 println("123.345-80A".split(".", "-"))

使用正则表达式

 println("123.345-80A".split("\.|-".toRegex()))

试试 Kotlin Online

只需使用 value.split("\s".toRegex())

1.Splits 并迭代所有项目

value.split("\s".toRegex()).forEach { item ->
    //use item 
}

2.Spits 并使用第一项

value.split("\s".toRegex()).first()

3.Spits 并使用最后一项

value.split("\s".toRegex()).last()