Kotlin字串


String類表示char型別的陣列。 字串是不可變的,這意味著長度和元素在建立後不能更改。

val ch = charArrayOf('h', 'e', 'l', 'l', 'o')  
val st = String(ch)

與Java不同,Kotlin不需要使用new關鍵字來範例化String類的物件。 String可以簡單地在雙引號("")中宣告,稱為跳脫字串或三引號(""" """),稱為原始字串。

val str1 = "Hello, Yiibai"  
val str2 = """Welcome To Yiibai"""

字串屬性

屬性 描述
length: Int 它返回字串序列的長度。
indices: IntRange 它返回當前char序列中有效字元索引的範圍。
lastIndex: Int 它返回char序列中最後一個字元的索引。

字串函式

函式 描述
compareTo(other: String): Int 它將當前物件與指定物件進行比較以獲得順序。 如果current等於指定的其他物件,則返回0
get(index: Int): Char 它返回當前字元序列中給定索引處的字元。
plus(other: Any?): String 它返回連線字串,其中包含給定其他字串的字串表示形式。
subSequence(startIndex: Int,endIndex: Int): CharSequence 它從當前字元序列返回從startIndex開始到endIndex新的字元序列。
CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false):Boolean 如果字元序列包含指定的字元序列,則返回true
CharSequence.count(): Int 它返回char序列的長度。
String.drop(n: Int): String 刪除前n個字元後返回一個字串。
String.dropLast(n: Int): String 刪除最後一個n字元後返回一個字串。
String.dropWhile(predicate: (Char) -> Boolean): String 它返回一個包含所有字元的字元序列,但滿足給定謂詞的第一個字元除外。
CharSequence.elementAt(index: Int): Char 它將返回給定索引處的字元,或如果索引在字元序列中不存在,則丟擲IndexOutOfBoundsException
CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false): Int 它返回從給定的索引值開始給定字元第一次出現的索引。
CharSequence.indexOfFirst(predicate: (Char) -> Boolean): Int 它返回與給定謂詞匹配的第一個字元的索引,如果字元序列不包含任何此類字元,則返回-1
CharSequence.indexOfLast(predicate: (Char) -> Boolean): Int 它返回與給定謂詞匹配的最後一個字元的索引,如果字元序列不包含任何此類字元,則返回-1
CharSequence.getOrElse(index: Int, defaultValue: (Int) ->Char): Char 如果索引超出當前字元序列的範圍,它將返回指定索引處的字元或呼叫defaultValue函式的結果。
CharSequence.getOrNull(index: Int): Char? 它返回給定索引處的字元,如果索引超出字元序列的範圍,則返回null

字串元素和模板

1. 字串元素

字串中存在的字元稱為字串元素。 通過索引操作string[index]存取字串的元素。 String的索引值從0開始,以字串string [string.length-1]結束。 索引0表示第一個元素,索引1表示第二個元素,依此類推。

val str ="Hello, yiibai"  
println(str[0]) //prints H

存取字串元素的範例

fun main(args: Array<String>) {

    val str = "Hello, yiibai!"
    println(str[0])
    println(str[1])
    println(str[str.length-1])
}

執行上面範例程式碼,得到以結果 -

H
e
!

2. 字串模板

字串模板表示式是一段程式碼,它計算並將結果返回到字串中。 兩種字串型別(跳脫和原始字串)都包含模板表示式。 字串模板以美元符號$開頭,其中包含變數名稱或花括號中的任意表示式。

字串模板作為變數名稱:

val i =10  
print("i = $i") //i=10  

fun main(args: Array<String>) {  
    val i =10  
    print("i = $i")//i=10  
}

執行上面範例程式碼,得到以下結果 -

i=10

字串模板作為花括號中的任意表示式:

字串模板也用於花括號中的表示式來計算字串表示式。 這是通過使用美元符號$來完成的。

fun main(args: Array<String>) {
    val str = "abcd"
    println("$str 是一個字串,它的長度是:${str.length}")
}

執行上面範例程式碼,得到以下結果 -

abcd 是一個字串,它的長度是:4

原始字串中的字串模板

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

    val myString = """value $a
        |is greater than value $b
    """.trimMargin()
    println("${myString.trimMargin()}")
}

執行上面範例程式碼,得到以下結果 -

value 10
is greater than value 5

Kotlin字串文字

Kotlin有兩種型別的字串文字:

  • 跳脫字串
  • 原始字串

1. 跳脫字串

跳脫字串在雙引號("")內宣告,並且可能包含跳脫字元,如\n\t\b\r\'等。

val text1 ="Hello, Yiibai"  
// 或者
val text2 ="Hello, Yiibai\n"  
// 或者
val text3 ="Hello, \nYiibai"

2. 原始字串

行字串在三引號("""""")內宣告。它提供了在新行中宣告字串並包含多行的工具。 行字串不能包含任何跳脫字元。

val text1 ="""  
             Welcome   
                 To  
Yiibai Yiibai  
    """

使用帶有新行的原始字串時,它會生成一個|作為保證字首。 例如:

fun main(args: Array<String>) {

    val text = """Kotlin is official language  
        |announce by Google for  
        |android application development  
    """
    println(text)
}

執行上面範例程式碼,得到以下結果 -

Kotlin is official language
        |announce by Google for
        |android application development

字串trimMargin()函式

使用trimMargin()函式刪除前導空格。 預設情況下,trimMargin()函式使用|作為保證字首。

fun main(args: Array<String>) {

    val text = """Kotlin is official language  
        |announce by Google for  
        |android application development  
    """.trimMargin()

    println(text)
}

執行上面範例程式碼,得到以下結果 -

Kotlin is official language
announce by Google for
android application development

但是,可以通過在trimMargin()函式中傳遞一個新字串來更改它。

fun main(args: Array<String>) {

    val text = """Kotlin is official language  
        #announce by Google for  
        #android application development  
    """.trimMargin("#")
    println(text)
}

執行上面範例程式碼,得到以下結果 -

Kotlin is official language
announce by Google for
android application development

Kotlin字串相等

在Kotlin中,字串相等比較是在結構相等(==)和參照相等(===)的基礎上完成的。
在結構相等中,兩個物件在記憶體中具有單獨的範例但包含相同的值。參照相等指定兩個不同的參照將指向同一範例記憶體。

結構相等(==)

要檢查包含相同值的兩個物件,可使用==運算子或!=運算子進行否定。 它相當於java中的equals()

fun main(args: Array<String>) {
    val str1 = "Hello, World!"
    val str2 = "Hello, World!"
    println(str1==str2) //true
    println(str1!=str2) //false
}

執行上面範例程式碼,得到以下結果 -

true
false

參照相等(===)

要檢查兩個不同的參照指向同一個範例,可使用===運算子。 !==運算子用於否定。 a === b當且僅當ab都指向同一個物件時才指定true

讓我們來看一個參照相等的例子,它檢查不同的參照是否包含相同的範例。 要建立字串,使用輔助方法buildString而不是使用引號。

fun main(args: Array<String>) {
    val str1 = buildString { "string value" }
    val str2 = buildString { "string value" }
    println(str1===str2)
    println(str1!==str2)
}

執行上面範例程式碼,得到以下結果 -

false
true