问题描述
String.trim()
不适用于使用 buildString
构建的字符串。例如,
val s = buildString {
append("{")
append('\n')
append(" ".repeat(5))
append("hello")
append(" ".repeat(7))
append("world")
append("}")
}
println(s.trim())
这个打印
{
hello world}
但我需要它来打印
{
hello
world
}
如何在不编写自己的修剪方法的情况下修剪缩进?
解决方法
trim()
仅从整个字符串的开头和结尾删除空格,而不是每行。您可以使用以下命令从每一行中删除空格:
s.lineSequence()
.map { it.trim() }
.joinToString("\n")
请注意,作为副作用,上面的代码会将所有行尾转换为 LF
("\n"
)。您可以将 "\n"
替换为 "\r\n"
或 "\r"
以获得不同的结果。为了完全保留原始字符串中的行尾,我们需要一个更复杂的解决方案。
一个班轮:
1em
,
您可以使用正则表达式来修剪前导空格:
val s = buildString {
append("{")
append('\n')
append(" ".repeat(5))
append("hello\n")
append(" ".repeat(7))
append("world\n")
append("}")
}
println(s.replace(Regex("""^\s+""",RegexOption.MULTILINE),""))
输出:
{
hello
world
}