Kotlin的第二部分將專門對字符串和異常處理做一個介紹
1. 字符串
1.1 創建
1.2 字符串模板
1.3 行字符串
1.4 常用函數
2. 異常處理
2.1 try catch finally
2.1 throw,throws
創建字符串的形式有兩種,第一種是讓系統自動識別爲字符串類型,第二種是直接調用String類的構造函數
var input = "這是一個字符串"
var chars = charArrayOf('h', 'e', 'l', 'l', 'o');
var dyInput: String = String(chars);
println("自動獲得變量類型,$input");
println("指定對象類型類型,$dyInput");
第1行,以雙引號的形式指明input爲字符串類型
第3行,調用String類的構造函數完成String對象dyInput的創建,其函數在StringsJVM.KT文件中
"這是字符串$input"
var input = "這是一個字符串"
var inputTemplate = "這是字符串模板$input"
println("這是字符串模板,$inputTemplate");
行字符串使用三個引號來使得字符串保留其基本格式
val text1 ="""
hello
world
hello world
"""
println("行字符串,$text1");
// 輸出的字符和格式都和原來的保持一致
函數名 | 作用 |
plus(other: Any?) | 字符串拼接,類似於java中的+ |
get(index: Int) | 獲取指定下標的字符 |
subSequence(startIndex: Int, endIndex: Int) | 字符串截取 |
compareTo(other: String) | compareTo函數按字典順序比較兩個字符串。如果當前字符串等於參數字符串,則返回0;如果當前字符串位於參數字符串之前,則返回一個小於0的值;如果當前字符串位於參數字符串之後,則返回一個大於0的值。 |
val length: Int | 返回字符串長度 |
trim() | 去除字符串開頭和結尾的空格 |
split(delimiter: String, ignoreCase: Boolean, limit: Int) | 根據delimiter來分割字符串,返回list,第二個參數表示是否忽略大小寫,默認爲不忽略大小寫(備註如果delimiter爲多個分隔符的話,會調用私有方法rangesDelimitedBy完成字符串分割) |
indices屬性 | 返回有效字符索引的範圍。 |
getOrNull(index: Int): Char? | 返回給定索引處的字符,如果索引超出字符序列的範圍,則返回null |
contains(other: CharSequence, ignoreCase: Boolean = false) | 如果字符序列包含指定的字符序列,則返回true |
count() | 返回char序列的長度 |
drop(n: Int): | 刪除前n個字符後返回一個字符串 |
trimMargin() | 刪除前導空格 |
first() | first查找第一個元素,如果字符串爲空,則拋出NoSuchElementException異常 |
first { it =='h'} | 查找第一個指定元素是否和條件表達式一致 |
indexOf() | 查找某一個元素或字符串在原字符串中第一次出現的下標。 |
replace()函數 | 字符串替換函數 |
isEmpty() | 判斷其length是否等於0,若等於0則返回true,反之返回false。不能直接用於可空的字符 |
isBlank() | 判斷其length是否等於0,或者判斷其包含的空格數是否等於當前的length。不能直接用於可空的字符串 |
Kotlin中異常處理和java是非常相似的,也是通過try catch finally來處理異常
val a: Int? = try {
parseInt("a")
} catch (e: NumberFormatException) {
null
} finally {
println("異常處理,執行到finally");
}
先簡單回顧下java中 throw和throws;
- throw語句:用於拋出一個異常,當程序運行到throw語句的時候即不再繼續執行
- throws語句 :如果一個方法可以引發異常,而它本身並不對該異常進行處理,那麼該方法必須將這個異常拋給調用者可以使程序能夠繼續執行下去,這時候就要用到throws語句
kotlin中是沒有throws語句的,即沒有受檢的異常。這是爲了防止如下的代碼不斷的出現
try {
log.append(message)
}
catch (IOException e) {
// 必須要安全
}
Kotlin 中所有異常類都是 Throwable 類的子孫類,使用 throw-表達式來拋出異常:
throw Exception("Hi There!")
區別於java的另一個地方是: Kotlin中的try語句是一個表達式,即它可以有一個返回值:
val a: Int? = try { Integer.parseInt('c') } catch (e: NumberFormatException) { null }
try-表達式的返回值是 try 塊中的最後一個表達式或者是(所有)catch 塊中的最後一個表達式。 finally 塊中的內容不會影響表達式的結果。
再說另一個區別之前,我們先介紹下Kotlin中的Nothing類型,該類型沒有值,而是用於標記永遠不能達到的代碼位置。 在你自己的代碼中,你可以使用 Nothing 來標記一個永遠不會返回的函數:
public fun catchException(): Nothing {
throw Exception();
}
如上代碼中,函數catchException返回的類型爲Nothing,當你編寫一個Nothing類型的函數的時候,如果不給這個函數的表達式最後一行主動拋出一個異常,即此處的throw Exception(),你會發現程序編譯錯誤,即此函數永遠不會返回
區別於java還有一個地方是: 在 Kotlin 中 throw 是表達式,所以你可以使用它(比如)作爲 Elvis 表達式(三目運算符)的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
throw 表達式的類型是特殊類型 Nothing,如上代碼的含義是如果persion.name爲null,則拋出異常IllegalArgumentException