Kotlin - 如何 trim 多行字符串中的所有前导空格?
Kotlin - How to trim all leading spaces from a multiline string?
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 方法的情况下 trim 缩进?
trim()
只删除整个字符串开头和结尾的空格,而不是每行。您可以使用以下命令从每一行中删除空格:
s.lineSequence()
.map { it.trim() }
.joinToString("\n")
请注意,作为副作用,上面的代码将所有行结尾转换为 LF
("\n"
)。您可以将 "\n"
替换为 "\r\n"
或 "\r"
以获得不同的结果。要完全保留原始字符串中的行结尾,我们需要更复杂的解决方案。
一个班轮:
s.lines().joinToString(transform = String::trim, separator = "\n")
您可以使用正则表达式 trim 前导空格:
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
}
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 方法的情况下 trim 缩进?
trim()
只删除整个字符串开头和结尾的空格,而不是每行。您可以使用以下命令从每一行中删除空格:
s.lineSequence()
.map { it.trim() }
.joinToString("\n")
请注意,作为副作用,上面的代码将所有行结尾转换为 LF
("\n"
)。您可以将 "\n"
替换为 "\r\n"
或 "\r"
以获得不同的结果。要完全保留原始字符串中的行结尾,我们需要更复杂的解决方案。
一个班轮:
s.lines().joinToString(transform = String::trim, separator = "\n")
您可以使用正则表达式 trim 前导空格:
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
}