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

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での変数展開同様に$記号がキーワードとして使われるため、この書き方は覚えておくとよさそうです。

参考

arrow_back

Previous

Spring Bootプロファイルの指定あれこれ

Next

Keycloak 4とSpring Boot 2アプリの連携 - リソースサーバー
arrow_forward