【Kotlin練習問題】トリプルクォート文字列

Kotlin

Kotlinにおける文字列

Kotlinには二種類のString文字列があります。

エスケープ文字を含むStringと、改行を含む文字列です。
エスケープを含む文字列とは以下のようなものです。

val s = "Hello, world!\n"

エスケープはバックスラッシュ(\)によって示され、\nは改行を意味します。エスケープを含まない文字列のことを生文字列(raw string)と呼びますが、以下のようなものを示します。

生文字列はトリプルクォート(“””)によって表され、エスケープを含まずに改行やその他の文字を表すことができます。

val text = """
    for (c in "foo")
        print(c)
"""

trimMargin

生文字列から文頭の空白を削除するにはtrimMargin()関数を使用します。

val text = """
    |Tell me and I forget.
    |Teach me and I remember.
    |Involve me and I learn.
    |(Benjamin Franklin)
    """.trimMargin()

上記の場合|の前にある空白(コード上には半角4つ分の空白があります)は全て削除され、空白と|が無くなった状態になります。ここでの|のことをマージン接頭辞と呼びますが、trimMargin()のデフォルトでのマージン接頭辞は|に設定されています。trimgMargin(“>”)のように引数に任意の文字を渡すことで、それをマージン接頭辞として設定することができます。

trimIndent

単純に文頭の空白を削除するだけであれば、trimIndent()関数も使うことができます。

val withoutIndent =
    """
            ABC
            123
            456
        """.trimIndent()
println(withoutIndent)

上記のコードは最終的に

ABC
123
456

のように空白が無い状態で表示されます。

注意したいのはtrimIndentは全ての行の中から最小のインデント数を調べ(今回は全て半角12個)、それを全ての行から削除します。ですので、

val withoutIndent =
    """
ABC
            123
            456
            
        """.trimIndent()
println(withoutIndent)

のように、一行でもインデントが0であった場合、trimIndent()は全行から何も削除しないことになります。出力結果はコードで表示されているのと同じになります。

問題

const val question = "life, the universe, and everything"
const val answer = 42

val tripleQuotedString = """
    #question = "$question"
    #answer = $answer""".trimIndent()

fun main() {
    println(tripleQuotedString)
}

上記のコード中のtrimIndentをtrimMarginで置き換え、最終的にメインメソッドで表示される文字列に#が含まれないようにしてください。

Playgroundでコードの編集および動作確認ができます。

答え

const val question = "life, the universe, and everything"
const val answer = 42

val tripleQuotedString = """
    #question = "$question"
    #answer = $answer""".trimMargin("#")

fun main() {
    println(tripleQuotedString)
}
[解説]

trimMarginのマージン接頭辞に#を渡すことで、tripleQuotedString内のそれぞれの行のはじめの#を取り除いています。また#の前にある空白も削除されています。

答え

その他の問題はこちらからどうぞ。

おすすめ書籍

Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。

実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました