字符串

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

  1. val str = "abcd 123"

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

  1. fun main() {
  2. val str = "abcd"
  3. //sampleStart
  4. for (c in str) {
  5. println(c)
  6. }
  7. //sampleEnd
  8. }

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

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

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

  1. fun main() {
  2. //sampleStart
  3. val s = "abc" + 1
  4. println(s + "def")
  5. //sampleEnd
  6. }

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

字符串 - 图1

字符串字面值

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

转义字符串

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

  1. val s = "Hello, world!\n"

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

多行字符串

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

  1. val text = """
  2. for (c in "foo")
  3. print(c)
  4. """

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

  1. val text = """
  2. |Tell me and I forget.
  3. |Teach me and I remember.
  4. |Involve me and I learn.
  5. |(Benjamin Franklin)
  6. """.trimMargin()

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

字符串模板

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

  1. fun main() {
  2. //sampleStart
  3. val i = 10
  4. println("i = $i") // 输出“i = 10”
  5. //sampleEnd
  6. }

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

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

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

  1. val price = """
  2. ${'$'}_9.99
  3. """