Kotlin 字符串和字符串模板

在本文中,您将借助示例学习Kotlin字符串,字符串模板以及一些常用的字符串属性和函数。

Kotlin String(字符串)

字符串是字符序列。例如,"Hello there!"是字符串字面量。

在Kotlin中,所有字符串都是String类的对象。 这意味着,诸如“Hello here!”之类的字符串文字被实现为该类的实例。

如何创建一个字符串变量?

这是在Kotlin中定义 String 变量的方法。例如,

val myString = "Hey there!"

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

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

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

如何访问字符串的字符?

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

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

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

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

item = myString[0]    // item = 'H'
item = myString[9]    // item = '!'
item = myString[10]   // 错误! 字符串索引超出范围
item =  myString[-1]  // 错误! 字符串索引超出范围

示例:遍历字符串

如果您需要遍历字符串的元素,则可以使用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 Vs 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("不使用trimMargin函数的输出:")

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

    println("使用trimMargin函数输出:\n")
    println(myString.trimMargin())
}

运行该程序时,输出为:

不使用trimMargin函数的输出:

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

使用trimMargin函数输出:

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 字符串模板

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

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

示例:Kotlin字符串模板

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("更大的数字是: ${myString.trimMargin()}")
}

运行该程序时,输出为:

更大的数字是: 6

几个字符串属性和函数

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

  • length 属性 - 返回字符串的字符序列的长度。

  • compareTo 函数 -将此字符串(对象)与指定的对象进行比较。 如果对象等于指定的对象,则返回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("s1字符串的长度为 ${s1.length}.")

    result = if (s1.compareTo(s2) == 0) "相等" else "不相等"
    println("字符串s1和s2是 $result.")

    // s1.get(2) 等同于 s1[2]
    println("第三个字符是 ${s1.get(2)}.")

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

    println("子字符串是 \"${s1.subSequence(4, 7)}\"")

}

运行程序时,输出为:

s1字符串的长度为 10.
字符串s1和s2是相等.
第三个字符是 y.
result = Hey there! How are you?
子字符串是 "the"