有人想知道吗?在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]
但就我而言,无效。
答案 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
方法的另一个例子:
取自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()