如何在Kotlin中替换String中的重复空格?

Din*_*per 28 kotlin

说我有一个字符串:"Test me".

我该如何将其转换为:"Test me"

我尝试过使用:

string?.replace("\\s+", " ")
Run Code Online (Sandbox Code Playgroud)

但似乎这\\s是Kotlin的非法逃脱.

hot*_*key 69

replaceKotlin中的函数对原始字符串和正则表达式模式都有重载.

"Test  me".replace("\\s+", " ")
Run Code Online (Sandbox Code Playgroud)

这取代了原始字符串\s+,这就是问题所在.

"Test  me".replace("\\s+".toRegex(), " ")
Run Code Online (Sandbox Code Playgroud)

此行用单个空格替换多个空格.注意显式toRegex()调用,它Regex从a开始String,因此用Regex模式指定重载.

还有一个过载,允许您从比赛中产生替补.例如,要用遇到的第一个空格替换它们,请使用:

"Test\n\n  me".replace("\\s+".toRegex()) { it.value[0].toString() }
Run Code Online (Sandbox Code Playgroud)


顺便说一下,如果重复操作,请考虑将模式结构移出重复代码以提高效率:

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

for (s in strings)
    result.add(s.replace(pattern, " "))
Run Code Online (Sandbox Code Playgroud)

  • 使用regex时,有时将`“”“`而不是`”`用作正则表达式字符串是很不错的,这样您就不必转义正则表达式的内容。 (3认同)