从字符串中拆分空间不在Kotlin中工作

时间:2018-01-22 10:57:32

标签: android android-studio kotlin kotlin-extension

有人想知道吗?在kotlin中拆分空格(“”)无法正常工作,我尝试使用不同的正则表达式代码,但根本不工作。

试过这个:

  SELECT
       EMPLID, DUR, DayName, TRC
  FROM DayTable
  WHERE         
      DATEPART(WEEKDAY, DUR) <= 2  or DATEPART(WEEKDAY, DUR) >= 6
  ORDER BY DUR ASC

然后我想出了解决方案 - &gt;创建包含此函数的java常量类,并将字符串数组返回给kotlin类。

对于这个问题我们可以直接实现这个问题吗?

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

KOTLIN具体:工作

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

许多人建议使用此解决方案:不工作

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

但就我而言,无效

6 个答案:

答案 0 :(得分:18)

这是String.split的Java和Kotlin实现之间的问题。

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

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

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

另外,正如@Thomas建议的那样,您可以使用常规空格字符来分割字符串:

value.split(" ")[0];

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

答案 1 :(得分:4)

您需要使用:

  

.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
}

答案 2 :(得分:1)

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

value.split(" ")[0]

做你想做的事。

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

答案 3 :(得分:1)

单个定界符

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

几个定界符

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

使用正则表达式

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

尝试Kotlin Online

答案 4 :(得分:0)

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方法的另一个例子:

enter image description here

取自KotlinConf presentation of Svetlana Isakova,“Kotlin in Action”的合着者

答案 5 :(得分:0)

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

1。拆分并迭代所有项

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

2。吐出并使用第一项

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

3。吐出并使用最后一项

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