在本文中,您將借助示例學(xué)習(xí)Kotlin字符串,字符串模板以及一些常用的字符串屬性和函數(shù)。
字符串是字符序列。例如,"Hello there!"是字符串字面量。
在Kotlin中,所有字符串都是String類的對(duì)象。 這意味著,諸如“Hello here!”之類的字符串文字被實(shí)現(xiàn)為該類的實(shí)例。
這是在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 !
像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中有兩種類型的字符串字面量:
轉(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)字符
\\ - 插入反斜杠
\$ - 插入美元字符
原始字符串可以包含換行符(不是換行符)和任意文本。原始字符串由三個(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è)新字符串來更改它。
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有一個(gè)很棒的功能,稱為字符串模板,它允許字符串包含模板表達(dá)式。
字符串模板表達(dá)式以美元符號(hào) $ 開頭。以下是一些示例:
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
由于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è)新的字符序列。
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"