从字符串中拆分 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()
有人想知道吗?在 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()