Kotlin 字符串和字符串模板

在本文中,您將借助示例學(xué)習(xí)Kotlin字符串,字符串模板以及一些常用的字符串屬性和函數(shù)。

Kotlin String(字符串)

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

在Kotlin中,所有字符串都是String類的對(duì)象。 這意味著,諸如“Hello here!”之類的字符串文字被實(shí)現(xiàn)為該類的實(shí)例。

如何創(chuàng)建一個(gè)字符串變量?

這是在Kotlin中定義 String 變量的方法。例如,

val myString = "Hey there!"

在這里,myString是String類型的變量。

您可以聲明 String 類型的變量,并在一條語句中指定其類型,然后在程序中稍后在另一條語句中初始化該變量。

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

如何訪問字符串的字符?

要訪問字符串的元素(字符),請(qǐng)使用索引訪問運(yùn)算符。例如,

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

在這里,item 變量包含 myString 字符串的第三個(gè)字符y。 這是因?yàn)镵otlin中的索引從 0 開始而不是 1。

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

item = myString[0]    // item = 'H'
item = myString[9]    // item = '!'
item = myString[10]   // 錯(cuò)誤! 字符串索引超出范圍
item =  myString[-1]  // 錯(cuò)誤! 字符串索引超出范圍

示例:遍歷字符串

如果您需要遍歷字符串的元素,則可以使用for循環(huán)輕松實(shí)現(xiàn)。

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

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

運(yùn)行該程序時(shí),輸出為:

H
e
y
!

Kotlin 中的字符串是不可變的

像Java一樣,字符串在Kotlin中是不可變的。這意味著您不能更改字符串的單個(gè)字符。例如,

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

但是,如果使用關(guān)鍵字var聲明了字符串變量,則可以重新分配該變量。(推薦閱讀Kotlin var Vs val

示例:重新分配字符串變量。

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

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

運(yùn)行該程序時(shí),輸出為:

myString  = Hey!
myString  = Hello!

字符串文字

字面量是固定值的源代碼表示形式。 例如,“Hey there!” 是直接出現(xiàn)在程序中而不需要計(jì)算的字符串文字(如變量)。

Kotlin中有兩種類型的字符串字面量:

1.轉(zhuǎn)義字符串

轉(zhuǎn)義的字符串中可能已轉(zhuǎn)義了字符。 例如

val myString = "Hey there!\n"

這里,\n 是轉(zhuǎn)義字符,用于在文本中出現(xiàn)的位置插入換行符。

以下是Kotlin支持的轉(zhuǎn)義字符列表:

  • \t -  插入制表符

  • \b - 插入退格符

  • \n - 插入換行符

  • \r - 插入回車符

  • \' - 插入單引號(hào)字符

  • \" - 插入雙引號(hào)字符

  • \\ - 插入反斜杠

  • \$ - 插入美元字符

2.原始字符串

原始字符串可以包含換行符(不是換行符)和任意文本。原始字符串由三個(gè)引號(hào) """ 分隔。例如,

fun main(args: Array<String>) {

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

運(yùn)行該程序時(shí),輸出為:

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

您可以使用trimMargin()函數(shù)刪除原始字符串的前導(dǎo)空格。例如,

示例:打印原始字符串

fun main(args: Array<String>) {

    println("不使用trimMargin函數(shù)的輸出:")

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

    println("使用trimMargin函數(shù)輸出:\n")
    println(myString.trimMargin())
}

運(yùn)行該程序時(shí),輸出為:

不使用trimMargin函數(shù)的輸出:

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

使用trimMargin函數(shù)輸出:

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

默認(rèn)情況下,trimMargin()函數(shù)使用 | 作為邊距前綴。但是,您可以通過向該函數(shù)傳遞一個(gè)新字符串來更改它。

示例:帶有參數(shù)的 trimMargin() 函數(shù)

fun main(args: Array<String>) {

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

運(yùn)行該程序時(shí),輸出為:

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

Kotlin 字符串模板

Kotlin有一個(gè)很棒的功能,稱為字符串模板,它允許字符串包含模板表達(dá)式。

字符串模板表達(dá)式以美元符號(hào) $ 開頭。以下是一些示例:

示例:Kotlin字符串模板

fun main(args: Array<String>) {

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

    println(myString)
}

運(yùn)行該程序時(shí),輸出為:

myInt = 5

這是因?yàn)樽址械谋磉_(dá)式$myInt(以$符號(hào)開頭的表達(dá)式)被求值并連接到字符串中。

示例:帶有原始字符串的字符串模板

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

    val myString = """
    |${if (a > b) a else b}
"""
    println("更大的數(shù)字是: ${myString.trimMargin()}")
}

運(yùn)行該程序時(shí),輸出為:

更大的數(shù)字是: 6

幾個(gè)字符串屬性和函數(shù)

由于Kotlin中的字面量是作為String類的實(shí)例實(shí)現(xiàn)的,因此您可以使用該類的幾個(gè)方法和屬性。

  • length 屬性 - 返回字符串的字符序列的長(zhǎng)度。

  • compareTo 函數(shù) -將此字符串(對(duì)象)與指定的對(duì)象進(jìn)行比較。 如果對(duì)象等于指定的對(duì)象,則返回0。

  • get 函數(shù) - 返回指定索引處的字符。您可以使用索引訪問運(yùn)算符而不是get函數(shù),因?yàn)樗饕L問運(yùn)算符在內(nèi)部調(diào)用get函數(shù)。

  • plus 函數(shù) - 返回一個(gè)新字符串,該字符串是通過將該字符串與傳遞給此函數(shù)的字符串連接而獲得的。您可以使用 + 運(yùn)算符代替 plus 函數(shù),因?yàn)?運(yùn)算符在后臺(tái)調(diào)用 plus 函數(shù)。

  • subSequence 函數(shù) - 從指定的開始和結(jié)束索引處返回一個(gè)新的字符序列。

示例:字符串屬性和函數(shù)

fun main(args: Array<String>) {

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

    println("s1字符串的長(zhǎng)度為 ${s1.length}.")

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

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

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

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

}

運(yùn)行程序時(shí),輸出為:

s1字符串的長(zhǎng)度為 10.
字符串s1和s2是相等.
第三個(gè)字符是 y.
result = Hey there! How are you?
子字符串是 "the"
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清