KotlinDive

プログラミング言語 Kotlin についての入門ブログです。

データ型(文字、文字列)

1. 文字型

Charが文字型です。C言語などと違い、直接的に数値として扱うことはできません。
文字リテラルはシングルクォートで囲います。
バックスラッシュを利用することで、エスケープシーケンスを利用することもできます。

\t 水平タブ
\b バックスペース
\n 改行
\r 復帰
\' シングルクォーテーション
\" ダブルクォーテーション
\\ バックスラッシュ
\$ ダラーマーク
\u[unicode] Unicode

fun main(args: Array) {
    val c = 'a'

    // これはビルドエラー
    // if (c == 0)
    //     println("cは0です")
    // else
    //     println("cは0以外です")

    // 明示的に変換する必要がある
    if (c.toInt() == 0)
        println("cは0です")
    else
        println("cは0以外です")

    // エスケープシーケンスを利用する
    val cArray = arrayOf('\u3053', '\u3068', '\n', '\t', '\u308A', '\u3093')

    for(c in cArray) {
        print(c)
    }
}

cは0以外です
こと
    りん

2. 文字列

Stringが文字列型です。文字列型はイミュータブルで、各要素の文字にはstr[index]のようにアクセウできます。
また、forループで各要素をイテレーションすることもできます。
文字列リテラルには2種類あります。
1つはダブルクォートで囲うもので、Javaなどにもある一般的な文字列リテラルです。
もう1つは、トリプルクォート("""some string""")で囲うもので、
バックスラッシュによるエスケープなしに目で見たままの文字列を表現できます


fun main(args: Array) {
    val str = "Hello\n\tWorld!"
    println(str)

    println("-----------")

    for(c in str) {
        println(c)
    }

    println("-----------")

    // コード上の見た目そのままに入力されてしまうため、
    // コード上の字下げやインデントなどもそのまま表現されてしまう
    val str2 = """
        Hello
            World!
        """

    println(str2)

    println("-----------")

    // マージンプレフィックスをつけてtrimMarginをすることで
    // 簡単に見た目をきれいにできる
    val str3 = """
        |Hello
        |   World!
        """

    print(str3.trimMargin())
}

Hello
    World!
-----------
H
e
l
l
o



W
o
r
l
d
!
-----------

        Hello
            World!

-----------
Hello
    World!

4. 文字列テンプレート

ここまでも何度か登場してきましたが、 文字列の中に${式}とするとこで式を評価した結果を文字列にすることができます。


fun main(args: Array) {
    val str = "TestString"
    val num = 10

    println("${str}の長さは${str.length}です")
    println("${num}を2倍にした値は${num * 2}です")
}

TestStringの長さは10です
10を2倍にした値は20です

$を文字列テンプレートではなく、そのままの文字として扱いたい場合はエスケープシーケンスを使います。

fun main(args: Array) {
    val str = "TestString"

    println("\${str}の結果は${str}です")
}

${str}の結果はTestStringです

また、トリプルクォートでも同じように文字列テンプレートを使えますが、 エスケープシーケンスを使うことができないため、次のようにします。


fun main(args: Array) {
    val str = "TestString"

    println("""${'$'}{str}の結果は${str}です""")
}

${str}の結果はTestStringです