9
4

More than 1 year has passed since last update.

Kotlin: trimIndent と trimMargin の違い

Last updated at Posted at 2018-06-22

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

9
4
0

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
  3. You can use dark theme
What you can do with signing up
9
4