1. 概要

このチュートリアルでは、KotlinのStringテンプレートとは何かとその使用方法について説明します。

他の機能に精通し、Kotlinの使用方法を知るために、Kotlinチュートリアルの1つをご覧ください。

2. Kotlinの文字列

Javaと同様に、KotlinのStringsは不変です。 つまり、作成されたStringを変更する手段がないということです。 ただし、特定の文字列から別の文字列を派生させる場合があります。

Kotlinは、Java Stringクラスを追加機能で強化しました。

たとえば、メソッド padEnd()を使用すると、 String、を次のようにフォーマットできます。

"Hello".padEnd(10, '!')

これにより、新しい文字列「Hello!!!!!」が生成されます。

3. 文字列テンプレート

文字列テンプレートは、埋め込み式を含むStringリテラルです。

たとえば、Javaの次のコード:

String message = "n = " + n;

Kotlinでは次のようになります。

val message = "n = $n"

String テンプレートでは、有効なKotlin式を使用できます。

val message = "n + 1 = ${n + 1}"

Javaとは異なり、Kotlinの構成の多く(ただし、すべてではありません)は式です

したがって、Stringテンプレートにはロジックも含まれる場合があります。

val message = "$n is ${if(n > 0) "positive" else "not positive"}

中括弧の中には、有効なKotlin式があることに注意してください。 これが、ネストされた二重引用符をエスケープしない理由です。

String テンプレートは、式を評価し、評価結果に対して toString()メソッドを呼び出すことによって解決されます。

Stringテンプレートはネストできます。

val message = "$n is ${if (n > 0) "positive" else 
  if (n < 0) "negative and ${if (n % 2 == 0) "even" else "odd"}" else "zero"}"

String テンプレートパーサーは、最もネストされたテンプレートからの解決を開始し、評価して、 toString()メソッドを呼び出します。

String テンプレートはネストできますが、できるだけ単純にすることをお勧めします。 Kotlinには多くの便利なツールが用意されているため、これはまったく難しいことではありません。

String テンプレートの一部としてではなく、生のドル記号を使用したい場合はどうなりますか?

次に、その前に円記号を付けてエスケープします。

val message = "n = \$n"

ドル記号に続くものは通常の文字列になります–それはもう評価されず、そのまま解釈されます。

4. 生の文字列

さらに、Kotlinには、特殊文字をエスケープせずに含めることができる、トリプルクォートされた生の文字列があります。

結果のStringは、トリプルダブルクォート記号の2つの連続する重複しないオカレンスの間に含まれます。

たとえば、Javaでは、 C:\ Repository \ read.me、にあるリソースへのWindowsスタイルのファイルパスを含む String を適切に作成するには、それを定義する必要があります。この上:

String path = "C:\\Repository\\read.me"

Kotlinでは、同じ結果を達成するために、トリプルクォート表記を使用する場合があります。

val path = """C:\Repository\read.me"""

複数行のString:を作成するために、この表記を使用する場合があります。

val receipt = """Item 1: $1.00
Item 2: $0.50"""

これにより、正確に2行にまたがるStringが作成されます。 このインデントを好む場合:

val receipt = """Item 1: $1.00
                >Item 2: $0.50""".trimMargin(">")

trimMargin()メソッドを使用して、すべての行の先頭からマージンプレフィックスの最初の出現までの最終的な空白を削除します(上記の例では> )。

トリプルクォートされた文字列はエスケープシーケンスをサポートしていません。 それは私たちが書いた場合

val receipt = """Item 1: $1.00\nItem 2: $0.50"""

2行の文字列を取得するには、予想される改行の代わりに、文字 \nを含む1行を取得します。

ただし、トリプルクォートされたStringsはテンプレート化をサポートしています。 

これは、前のセクションで説明した方法で、ドル記号で始まるシーケンスが文字列に解決されることを意味します。 エスケープ文字を機能させるために、この事実を使用する場合があります。

val receipt = """Item 1: $1.00${"\n"}Item 2: $0.50"""

5. 結論

この記事では、JavaにはないKotlin言語の1つの機能であるStringテンプレートについて検討しました。 通常の複数行の文字列の場合の使用法を示しました。

ここに記載されているすべてのコードスニペットは、GitHubのリポジトリにあります。