search
LoginSignup
3

More than 3 years have passed since last update.

Organization

Kotlin: trimIndent と trimMargin の違い

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 というものもあります。)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3