Kotlin 字符串和字符串模板

Kotlin String

字符串是一系列字符。例如,"Hello there!" 是一个字符串字面量。

在 Kotlin 中,所有字符串都是 String 类的对象。这意味着,像 "Hello there!" 这样的字符串字面量是该类的实例实现的。 


如何创建 String 变量?

下面是如何在 Kotlin 中定义 String 变量的方法。例如:

val myString = "Hey there!"

这里,myString 是一个 String 类型的变量。

您可以在一个语句中声明 String 类型的变量并指定其类型,然后在程序后面的另一个语句中初始化该变量。

val myString: String
... .. ...
myString = "Howdy"

如何访问字符串中的字符?

要访问字符串中的元素(字符),可以使用索引访问运算符。例如:

val myString = "Hey there!"
val item = myString[2]

这里,item 变量包含 y,即 myString 字符串中的第三个字符。这是因为 Kotlin 中的索引从 0 开始,而不是从 1 开始。

val myString = "Hey there!"
var item: Char

item = myString[0]    // item contains 'H'
item = myString[9]    // item contains '!'
item = myString[10]   // Error! String index is out of range
item =  myString[-1]  // Error! String index is out of range 

示例:遍历字符串

如果您需要遍历字符串中的元素,可以使用for 循环轻松完成。

fun main(args: Array<String>) {
    val myString = "Hey!"

    for (item in myString) {
        println(item)
    }
}

运行程序后,输出将是

H
e
y
!

Kotlin 中的字符串是不可变的

与 Java 一样,Kotlin 中的字符串也是不可变的。这意味着您不能更改字符串中的单个字符。例如:

var myString = "Hey!"
myString[0] = 'h'      // Error! Strings

但是,如果您使用 var 关键字声明了变量,则可以重新为该字符串变量赋值。(推荐阅读Kotlin var 与 val

示例:重新为字符串变量赋值。


fun main(args: Array<String>) {
    var myString = "Hey!"
    println("myString  = $myString")

    myString = "Hello!"
    println("myString  = $myString")
}

运行程序后,输出将是

myString  = Hey!
myString  = Hello!

字符串字面量

字面量是固定值的源代码表示。例如,"Hey there!" 是一个字符串字面量,它直接出现在程序中,而无需进行计算(例如变量)。

Kotlin 中有两种字符串字面量:

1. 转义字符串


转义字符串可能包含转义字符。例如:

val myString = "Hey there!\n"

这里,\n 是一个转义字符,它在出现的位置插入一个换行符。

以下是 Kotlin 支持的转义字符列表:

  • \t - 插入制表符
  • \b - 插入退格符
  • \n - 插入换行符
  • \r - 插入回车符
  • \' - 插入单引号字符
  • \" - 插入双引号字符
  • \\ - 插入反斜杠
  • \$ - 插入美元符号字符

2. 原生字符串


原生字符串可以包含换行符(不是换行转义字符)和任意文本。原生字符串由三个双引号 """ 分隔。例如:

fun main(args: Array<String>) {

    val myString = """
    for (character in "Hey!")
        println(character)
"""
    print(myString)
}

运行程序后,输出将是

    for (character in "Hey!")
        println(character)

您可以使用 trimMargin() 函数 删除原生字符串的前导空格。例如:

示例:打印原生字符串


fun main(args: Array<String>) {

    println("Output without using trimMargin function:")

    val myString = """
    |Kotlin is interesting.
    |Kotlin is sponsored and developed by JetBrains.
"""
    println(myString)

    println("Output using trimMargin function:\n")
    println(myString.trimMargin())
}

运行程序后,输出将是

Output without using trimMargin function:

    |Kotlin is interesting.
    |Kotlin is sponsored and developed by JetBrains.

Output using trimMargin function:

Kotlin is interesting.
Kotlin is sponsored and developed by JetBrains.

默认情况下,trimMargin() 函数使用 | 作为边界前缀。但是,您可以通过将一个新字符串传递给此函数来更改它。

示例:带参数的 trimMargin()


fun main(args: Array<String>) {

    val myString = """
    !!! Kotlin is interesting.
    !!! Kotlin is sponsored and developed by JetBrains.
"""
    println(myString.trimMargin("!!! "))
}

运行程序后,输出将是

Kotlin is interesting.
Kotlin is sponsored and developed by JetBrains.

Kotlin String 模板

Kotlin 有一个很棒的功能叫做字符串模板,它允许字符串包含模板表达式。

字符串模板表达式以美元符号 $ 开头。以下是一些示例:

示例:Kotlin String 模板


fun main(args: Array<String>) {

    val myInt = 5;
    val myString = "myInt = $myInt"

    println(myString)
}

运行程序后,输出将是

myInt = 5

这是因为字符串中的表达式 $myInt(以 $ 符号开头的表达式)会被求值并连接到字符串中。

示例:带原生字符串的字符串模板


fun main(args: Array<String>) {
    val a = 5
    val b = 6

    val myString = """
    |${if (a > b) a else b}
"""
    println("Larger number is: ${myString.trimMargin()}")
}

运行程序后,输出将是

Larger number is: 6

一些字符串属性和函数

由于 Kotlin 中的字面量是作为 String 类的实例实现的,因此您可以使用该类的各种方法和属性。

  • length 属性 - 返回字符串字符序列的长度。
  • compareTo 函数 - 将此 String(对象)与指定的对象进行比较。如果对象与指定对象相等,则返回 0。
  • get 函数 - 返回指定索引处的字符。
    您可以使用索引访问运算符代替 get 函数,因为索引访问运算符在内部调用 get 函数。
  • plus 函数 - 返回一个新字符串,该字符串是通过将此字符串与传递给此函数的字符串连接而成的。
    您可以使用 + 运算符代替 plus 函数,因为 + 运算符在底层调用 plus 函数。
  • subSequence 函数 - 返回一个从指定的开始和结束索引开始的新字符序列。

示例:字符串属性和函数


fun main(args: Array<String>) {

    val s1  = "Hey there!"
    val s2 = "Hey there!"
    var result: String

    println("Length of s1 string is ${s1.length}.")

    result = if (s1.compareTo(s2) == 0) "equal" else "not equal"
    println("Strings s1 and s2 are $result.")

    // s1.get(2) is equivalent to s1[2]
    println("Third character is ${s1.get(2)}.")

    result = s1.plus(" How are you?") // result = s1 + " How are you?"
    println("result = $result")

    println("Substring is \"${s1.subSequence(4, 7)}\"")

}

运行程序时,输出将是:

Length of s1 string is 10.
Strings s1 and s2 are equal.
Third character is y.
result = Hey there! How are you?
Substring is "the"

访问 Kotlin String 类 以获取有关扩展属性、扩展、函数和构造函数的更多信息。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战