字符串

Kotlin 中字符串用 String 类型表示。 通常,字符串值是双引号(")中的字符序列:

val str = "abcd 123"

字符串的元素——字符可以使用索引运算符访问: s[i]。 可以使用 for 循环遍历这些字符:

fun main() {
val str = "abcd"
//sampleStart
for (c in str) {
    println(c)
}
//sampleEnd
}

字符串是不可变的。 一旦初始化了一个字符串,就不能改变它的值或者给它赋新值。 所有转换字符串的操作都以一个新的 String 对象来返回结果,而保持原始字符串不变:

fun main() {
//sampleStart
    val str = "abcd"
    println(str.uppercase()) // 创建并输出一个新的 String 对象
    println(str) // 原始字符串保持不变
//sampleEnd
}

如需连接字符串,可以用 + 操作符。这也适用于连接字符串与其他类型的值, 只要表达式中的第一个元素是字符串:

fun main() {
//sampleStart
val s = "abc" + 1
println(s + "def")
//sampleEnd
}

在大多数情况下,优先使用字符串模板多行字符串而不是字符串连接。

字符串字面值

Kotlin 有两种类型的字符串字面值:

转义字符串

转义字符串可以包含转义字符。
以下是转义字符串的一个示例:

val s = "Hello, world!\n"

转义采用传统的反斜杠(\)方式。
所支持的转义序列请参见 字符 页。

多行字符串

多行字符串可以包含换行以及任意文本。 它使用三个引号(""")分界符括起来,内部没有转义并且可以包含换行以及任何其他字符:

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

如需删掉多行字符串中的前导空格,请使用 trimMargin() 函数:

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

默认以竖线 | 作为边界前缀,但你可以选择其他字符并作为参数传入,比如 trimMargin(">")

字符串模板

字符串字面值可以包含模板表达式——一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,要么由一个的名称构成:

fun main() {
//sampleStart
    val i = 10
    println("i = $i") // 输出“i = 10”
//sampleEnd
}

要么是用花括号括起来的表达式:

fun main() {
//sampleStart
    val s = "abc"
    println("$s.length is ${s.length}") // 输出 "abc.length is 3"
//sampleEnd
}

在多行字符串及转义字符串中都可以使用模板。 如需在多行字符串(不支持反斜杠转义)中的允许作为标识符(identifier)开头的任意符号之前插入美元符 $, 请使用以下语法:s

val price = """
${'$'}_9.99
"""