Kotlin核心編程》 ——2.2.2 優(yōu)先使用val來(lái)避免副作用">《Kotlin核心編程》 ——2.2.2 優(yōu)先使用val來(lái)避免副作用
703
2025-03-31
2.5 字符串的定義和操作
我們似乎破壞了一個(gè)傳統(tǒng)。根據(jù)慣例,每本編程語(yǔ)言的技術(shù)書(shū)開(kāi)頭,似乎都會(huì)以打印一段“hello world!”的方式來(lái)宣告自己的到來(lái)。現(xiàn)在,我們決定秉承傳統(tǒng),來(lái)完成這一任務(wù)。當(dāng)然,此舉實(shí)際上不是為了宣揚(yáng)某種儀式,而是因?yàn)楸竟?jié)的內(nèi)容是關(guān)于Kotlin中又一項(xiàng)基礎(chǔ)的語(yǔ)法知識(shí),也就是字符串操作。
Kotlin中的字符串并沒(méi)有什么與眾不同,與Java一樣,我們通過(guò)雙引號(hào)來(lái)定義一個(gè)字符串,它是不可變的對(duì)象。
val str = "hello world!"
然后,我們可以對(duì)其進(jìn)行各種熟悉的操作:
str.length // 12
str.substring(0,5) // hello
str + " hello Kotlin!" // hello world! hello Kotlin!
str.replace("world", "Kotlin") // hello Kotlin!
由于String是一個(gè)字符序列,所以我們可以對(duì)其進(jìn)行遍歷:
>>> for (i in str.toUpperCase()) { print(i) }
HELLO WORLD!
還可以訪問(wèn)這個(gè)字符序列的成員:
str[0] // h
str.first() // h
str.last() // !
str[str.length - 1] // !
此外,Kotlin的字符串還有各種豐富的API,如:
// 判斷是否為空字符串
"".isEmpty() // true
" ".isEmpty() // false
" ".isBlank() // true
"abcdefg".filter { c -> c in 'a'..'d' } // abcd
更多字符串類方法可以查閱Kotlin API文檔:https://kotlinlang.org/api/latest/jvm/stdlib/ kotlin/-string/index.html
2.5.1 定義原生字符串
Java在JEP 326改進(jìn)計(jì)劃中提議,增加原生字符串的語(yǔ)法支持,因?yàn)槟壳八荒芡ㄟ^(guò)轉(zhuǎn)義字符的迂回辦法來(lái)支持,非常麻煩。而在Kotlin中,已經(jīng)支持了這種語(yǔ)法,我們來(lái)定義一個(gè)多行的原生字符串體驗(yàn)一下:
val rawString = """
\n Kotlin is awesome.
\n Kotlin is a better Java."""
>>> println(rawString)
\n Kotlin is awesome.
\n Kotlin is a better Java.
簡(jiǎn)而言之,用這種3個(gè)引號(hào)定義的字符串,最終的打印格式與在代碼中所呈現(xiàn)的格式一致,而不會(huì)解釋轉(zhuǎn)化轉(zhuǎn)義字符(正如上述例子中的\n),以及Unicode的轉(zhuǎn)義字符(如\uXXXX)。
比如,我們用字符串來(lái)描述一段HTML代碼,用普通字符串定義時(shí)必須是這樣子:
val html = "\n" +
"???
\n" +"???????????????
Hello World.
\n" +"??? \n" +
"\n"
采用原生字符串的格式,會(huì)非常方便。如下:
val html = """
Hello World.
"""
Kotlin 編程
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。