Regex Kotlin正则表达式拆分-删除尾部空间

Regex Kotlin正则表达式拆分-删除尾部空间,regex,kotlin,Regex,Kotlin,在科特林,我把一个句子分成几个词。然而,split方法在列表的末尾添加了一个空格。如何去掉尾随空格? 有没有一种不创建新列表的简单方法 package com.zetcode fun main(args: Array<String>) { val text = "I saw a fox in the wood. The fox had red fur." val pattern = "\\W+".toRegex() val words = patter

在科特林,我把一个句子分成几个词。然而,
split
方法在列表的末尾添加了一个空格。如何去掉尾随空格? 有没有一种不创建新列表的简单方法

package com.zetcode

fun main(args: Array<String>) {

    val text = "I saw a fox in the wood. The fox had red fur."

    val pattern = "\\W+".toRegex()

    val words = pattern.split(text)

    println(words)
}
package com.zetcode
趣味主线(args:Array){
val text=“我在树林里看见一只狐狸。狐狸有红色的毛皮。”
val pattern=“\\W+”.toRegex()
val words=模式。拆分(文本)
println(字)
}

该示例打印
[I,saw,a,fox,in,The,wood,The,fox,had,red,fur,]
空项出现在那里,因为字符串末尾有一个非单词
字符。您可以省略空项来解决问题:

val text = "I saw a fox in the wood. The fox had red fur."
val pattern = """\W+""".toRegex()
val words = pattern.split(text).filter { it.isNotBlank() }
println(words) // => [I, saw, a, fox, in, the, wood, The, fox, had, red, fur]
或者,使用相反模式的匹配方法,
\w+

val pattern = """\w+""".toRegex()
val words = pattern.findAll(text).map{it.value}.toList()
// => [I, saw, a, fox, in, the, wood, The, fox, had, red, fur]

您可以删除最后一项:

val words = pattern.split(text).dropLastWhile { it == "" }

哦,不,这是个坏主意,因为在使用
\W+
正则表达式拆分字符串时,最后一项并不总是空的。这里碰巧是空的,因为末尾有点。@WiktorStribiżew拆分方法在列表的末尾添加了一个空格a,但是这是OP的问题,如果文本是
我在树林中看到一只狐狸。狐狸有红色的毛发
,然后
\W+
分裂,你的代码将删除
毛发
。并不是说正则表达式拆分总是产生一个空的尾随项,我也不推荐这种方法。对于那个特定的案例来说,这是一个快速解决方案,但对于Wiktor已经演示过的其他句子来说,它不起作用。解决实际问题比使用快速修复更好。@Roland我同意,但问题不是提出新的拆分方法,而是在不创建新列表的情况下删除最后一项替代方法在可读性方面绝对是可行的。。。它的内容已经是:“查找所有单词”而不是“将所有非单词的单词分割,过滤掉非空白的单词,称之为“单词”。-)