Kotlinでヒアドキュメント中の文字をエスケープ

Created: 2018-08-09

Kotlin には変数展開機能があるため、$記号を使いたい場合エスケープが必要になる。 ヒアドキュメントと通常の文字列でエスケープの方法が少し異なり、クセがあるのでメモ。

要件

環境

今回の作業環境は以下のとおりです。

  • Java 8
  • Kotlin 1.2.41

デモ

通常の文字列内でのエスケープ

println("\${xyz}") // OK: ${xyz}

ヒアドキュメント内でのエスケープ

println("""
\${xyz}
""".trimIndent()) // NG: Compile ERROR

println("""
\$\{xyz\}
""".trimIndent()) // NG: \$\{xyz\}

println("""
${'$'}{xyz}
""".trimIndent()) // OK: ${xyz}

val doller: Char = '$';
println("""
${doller}{xyz}
""".trimIndent()) // OK: ${xyz}

Char型の値として変数展開させた文字をくっつけて使う、というわけですね。どうしてヒアドキュメントだけエスケープ仕様違うんだろう🤔

SpringのSpEL等では、Kotlinでの変数展開同様に$記号がキーワードとして使われるため、この書き方は覚えておくとよさそうです。

参考

avatar

Written by yo1000 | YO!CHI KIKUCHI
Loves 🌱 Spring, 🦢 Pelikan fountain pen and 🦁 FINAL FANTASY VIII