Kotlin には trimIndent
, trimMargin
という似た名前の2つの関数があります。 いずれもロー・ストリングの左側の余分な空白を取り除きます。
まずは実験
次のコードを実行してみます。
fun main(args: Array<String>) {
println("---")
println("""
for (i = 0; i < 100; ++i)
console.log(i)
""".trimMargin())
println("---")
println("""
for (i = 0; i < 100; ++i)
console.log(i)
""".trimIndent())
println("---")
}
結果
次のような結果が出力されます。
---
for (i = 0; i < 100; ++i)
console.log(i)
---
for (i = 0; i < 100; ++i)
console.log(i)
---
trimMargin
は指定された文字(列)に至るまでの空白とその文字(列)を除去してくれるもので、 trimIndent
は左側にあるスペースを、一番インデントの少ない行に合わせて削除してくれるものです。
trimMargin
次の場合にスペースが削除されます。
fun main(args: Array<String>) {
println("---")
println("""
|for (i = 0; i < 100; ++i)
|console.log(i)
""".trimMargin())
println("---")
println("""
> a
> b
> c
> d
""".trimMargin("> "))
println("---")
}
結果
---
for (i = 0; i < 100; ++i)
console.log(i)
---
a
b
c
d
---
補足
trimMargin
の引数には必ず長さ1以上の文字列を渡す必要があります。 省略した場合は "|"
が渡されたものとして扱われます。 空文字列(""
)を渡すと次のようなエラーが出ます。
Exception in thread "main" java.lang.IllegalArgumentException: marginPrefix must be non-blank string.
trimIndent
trimIndent
は引数を受けませんので、 引数を渡すと次のようなエラーが出ます。
error: too many arguments for public fun String.trimIndent(): String defined in kotlin.text
(引数を渡せる似た関数 replaceIndent
というものもあります。)