Kotlin - 如何修剪多行字符串中的所有前导空格?

Leg*_*123 2 string whitespace trim kotlin

String.trim()不适用于使用 构建的字符串buildString。例如,

val s = buildString {
    append("{")
    append('\n')
    append(" ".repeat(5))
    append("hello")
    append(" ".repeat(7))
    append("world")
    append("}")
}
println(s.trim())
Run Code Online (Sandbox Code Playgroud)

这打印

{
     hello       world}
Run Code Online (Sandbox Code Playgroud)

但我需要它来打印

{
hello
world
}
Run Code Online (Sandbox Code Playgroud)

如何在不编写自己的修剪方法的情况下修剪缩进?

bro*_*oot 7

trim()只删除整个字符串开头和结尾的空格,而不是每行删除空格。您可以使用以下命令删除每行中的空格:

s.lineSequence()
    .map { it.trim() }
    .joinToString("\n")
Run Code Online (Sandbox Code Playgroud)

请注意,作为副作用,上面的代码将所有行结尾转换为LF( "\n")。您可以替换"\n""\r\n""\r"以获得不同的结果。为了完全保留原始字符串中的行结尾,我们需要一个更复杂的解决方案。