瘋狂kotlin講義連載之Kotlin的基礎類型--字符串

Kotlin使用String類型字符串。字符串表示一個有序的字符集合,例如在前面代碼中看到的"fkit.org"、"crazyit.org"等表明字符串,String也可被當成多個char的有序集合。html

字符串類型

Kotlin使用String來表明字符串,String類型是一種快速、現代化的字符串實現,字符串中的每一個字符都由獨立的Unicode字符組成,String容許經過形如s[i]的格式來訪問字符串指定索引處的字符,也可經過for循環遍歷字符串的每一個字符。例如以下代碼。java

程序清單:codes\02\2.8\StringQs.kt正則表達式

fun main(args: Array<String>) {編程

var str = "fkjava.org"api

println(str[2]) // 輸出japp

println(str[3]) // 輸出adom

println(str[6]) // 輸出.jvm

// 遍歷str字符串中每一個字符ide

for (c in str) {工具

println(c)

}

}

上面代碼中第一行粗體字代碼使用s[i]的形式根據索引訪問字符串中指定位置的字符;第二行粗體字代碼則使用for循環遍歷字符串所包含的每一個字符。

Kotlin的字符串有兩種字面值(Literal),分別是:

轉義字符串:轉義字符串能夠有轉義字符,轉義字符串很像Java字符串。

原始字符串:原始字符串能夠包含換行和任意文本。原始字符串須要用三個引號括起來。

例如以下程序。

程序清單:codes\02\2.8\StringTest.kt

fun main(args: Array<String>) {

// 定義普通字符串

var str = "fkjava.org"

println(str.length)

// 定義原始字符串

val txt = """

|天上白玉京,

|十二樓五城。

|仙人撫我頂,

|結髮受長生。

""".trimMargin()

println(txt)

}

上面程序中第一行粗體字代碼是轉義字符串,這種字符串和普通的Java字符串基本相同;第二段粗體字代碼則是Kotlin原始字符串——三個引號括起來的部分都是字符串內容,包括換行符等各類特殊字符。

編程時爲了程序格式,每每會在原始字符串中進行一些縮進,但這些縮進每每並非原始字符串但願包含的,此時便可使用trimMargin()方法來去掉原始字符串前面的縮進——默認狀況下,Kotlin使用豎線(|)做爲邊界符。也就是說:全部豎線(|)以前的內容都會被去掉。

若是有必要,開發者固然也可以使用其餘字符做爲邊界符,此時就須要在trimMagrin()方法中傳入該邊界符做爲參數。例如以下程序(程序清單同上)。

// 定義原始字符串

val txt2 = """

^天上白玉京,

^十二樓五城。

^仙人撫我頂,

^結髮受長生。

""".trimMargin("^")

println(txt2)

字符串模板

Kotlin容許在字符串中嵌入變量和表達式,只要將變量和表達式放入${}中便可,這樣Kotlin將會把把該變量或表達式的值嵌入該字符串中。

字符串模板不只能夠在普通字符串中使用,也能夠在原始字符串中使用。例如以下程序:

程序清單:codes\02\2.8\StringTemplate.kt

fun main(args: Array<String>) {

val bookPrice = 79

// 字符串模板中嵌入變量

var s = "圖書價格是:${bookPrice}"

println(s)

val rand = java.util.Random() // 建立Java的Random對象

// 字符串模板中嵌入方法調用

var s2 = "僞隨機數是:${rand.nextInt(10)}"

println(s2)

val myStr = "fkjava.org"

println("${myStr}的長度是${myStr.length}")

var bookName = "瘋狂Kotlin講義"

val poem = """

|圖書名是${bookName},

|圖書價格是${bookPrice},

|隨機促銷價是${rand.nextInt(10) + 50}

""".trimMargin()

println(poem)

}

上面程序中第一行粗體字代碼在字符串模板中嵌入了一個普通變量,第二行粗體字代碼在字符串模板中嵌入了調用Random對象的nextInt()方法;第三行粗體字代碼則在字符串模板中嵌入了調用String對象的length屬性;第三段粗體字代碼在原始字符串中嵌入變量、表達式,這也是容許的。

Kotlin字符串的方法

Kotlin的String與Java的String並非同一個類,所以它們的方法略有不一樣,但在功能上,兩個類所提供的功能大體類似,實際上Kotlin的String類提供了更多方法。例如String提供了系列toXxx()方法將字符串轉成數值,例如以下代碼。

程序清單:codes\02\2.8\StringFunTest.kt

fun main(args: Array<String>) {

val s1 = "2.34"

// 將s1字符串轉成Double

val d: Double = s1.toDouble()

println(d)

var s2 = "45"

// 將s2字符串轉成Int

var i: Int = s2.toInt()

println(i)

}

此外,Kotlin的String也提供了一些額外的工具方法,例如將字符串首字母大寫、小寫的方法。例如以下代碼(程序清單同上)。

val str = "fkjava.org"

println(str.capitalize()); // 首字母大寫

println(str.decapitalize()); // 首字母小寫

還有例如返回兩個字符串相同的前綴、相同的後綴的方法。例如以下代碼(程序清單同上)。

var str2 = "crazyit.org"

// 返回兩個字符串相同的前綴

println(str2.commonPrefixWith("crazyjava.org"));

// 返回兩個字符串相同的後綴

println(str2.commonSuffixWith("fkit.org"));

還有Java的String的contains()方法不支持使用正則表達式,但Kotlin的String的contains()方法支持使用正則表達式匹配。例如以下代碼(程序清單同上)。

var str3 = "java886"

// 判斷str3是否包含3個連續的數字

println(str3.contains(Regex("\\d{3}")))

關於Kotlin字符串還有很多很是方便的工具方法,具體能夠參考Kotlin核心庫的關於String的API文檔:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html。

以上內容節選自《瘋狂Kotlin講義》:一本讓您最直接認識Kotlin的瘋狂講義
本書即將於2017年11月發售 敬請期待
往期連載

第二期:juejin.im/post/59c1d6…

第三期:juejin.im/post/59e407…

第四期:juejin.im/post/59ed77…

第五期:juejin.im/post/59eec3…

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

相關書籍《瘋狂Android講義》https://item.jd.com/11689014.html
相關文章
相關標籤/搜索