Kotlin Tutorial(7)陣列 << 前情
除了數字、字元與邏輯,字串幾乎是最常使用的型態,例如姓名、地址或電話這類文字資料,可以使用String型態宣告字串變數,還有呼叫String提供的函式執行各種需要的功能。
宣告字串變數
需要字串變數的時候,可以使用下面的語法宣告:
// 宣告可以改變值的字串變數
var <名稱>: String = "..."
// 可以省略型態
var <名稱> = "..."
// 宣告不可以改變值的字串變數
val <名稱>: String = "..."
// 可以省略型態
val <名稱> = "..."
下面的程式片段示範宣告字串變數的作法:
// 宣告可以更改字串值的變數
var greeting = "Hello"
greeting = "Hi"
// 宣告不可以更改字串值的變數
val greeting2 = "Hello"
// 編譯錯誤,不可以更改字串值
//greeting2 = "Hi"
應用程式經常需要顯示一些訊息,例如Android App的對話框,這類的訊息可能是一段包含格式的內容,使用「"""」前後包圍的字串值,可以包含字串值裡面的格式,例如下面的範例:
val literal: String = """
for (c in name) {
print(c)
}
"""
println(literal)
// 顯示:
// for (c in name) {
// print(c)
// }
上面的字串值會包含每一行前面的空白,如果需要移除前面的空白,可以在字串值的最後呼叫「trimMargin」函式,預設的邊界符號是「|」,你也可以在trimMargin指定一個自定的邊界符號:
val literal2: String = """
|for (c in name) {
| print(c)
|}
""".trimMargin()
println(literal2)
// 顯示:
//for (c in name) {
// print(c)
//}
val literal3: String = """
#for (c in name) {
# print(c)
#}
""".trimMargin("#")
println(literal3)
// 顯示:
//for (c in name) {
// print(c)
//}
比較與判斷
字串變數需要執行比較與判斷的時候,可以使用下面範例程式說明的函式:
val name: String = "simon"
val name2 = "SIMON"
// 判斷兩個字串是否一樣
println("name.equals(name2): ${name.equals(name2)}")
// 判斷兩個字串是否一樣,不分大小寫
println("name.equals(name2): ${name.equals(name2, true)}")
val URL = "http://www.CODEDATA.com.tw"
// 判斷字串前面是否為指定的內容
println("URL.startsWith(\"http\"): ${URL.startsWith("http")}")
// 判斷字串後面是否為指定的內容
println("URL.endsWith(\"tw\"): ${URL.endsWith("tw")}")
// 判斷字串內容是否為空白
println("URL.isBlank(): ${URL.isBlank()}")
println("URL.isNotBlank(): ${URL.isNotBlank()}")
// 判斷是否沒有字元
println("URL.isEmpty(): ${URL.isEmpty()}")
println("URL.isNotEmpty(): ${URL.isNotEmpty()}")
長度、字元與搜尋
需要取得字串的字元個數,處理字串裡面的字元與搜尋指定的內容,可以使用下面範例程式說明的函式:
val name: String = "simon"
// 傳回字元編號的範圍運算式
for (i in name.indices) {
// 取得指定編號的字元
print("${name.get(i)}\t")
}
println()
// 使用for迴圈依序處理所有字元
for (c in name) {
print("$c\t")
}
println()
// 第一個與最後一個字元
println("name.first(): ${name.first()}")
println("name.last(): ${name.last()}")
// 字元個數
println("name.length: ${name.length}")
// 最後一個字元的編號
println("name.lastIndex: ${name.lastIndex}")
val URL = "http://www.CODEDATA.com.tw"
// 從字串前面往後搜尋,傳回指定內容的位置編號,沒有的話傳回-1
println("URL.indexOf(\"w\"): ${URL.indexOf("w")}")
// 從字串後面往前搜尋,傳回指定內容的位置編號,沒有的話傳回-1
println("URL.lastIndexOf(\"w\"): ${URL.lastIndexOf("w")}")
// 傳回指定內容的位置編號,沒有的話傳回-1
println("URL.indexOf(\"codedata\"): ${URL.indexOf("codedata")}")
// 傳回指定內容的位置編號,沒有的話傳回-1,不分大小寫
println("URL.indexOf(\"codedata\", 0, true): ${URL.indexOf("codedata", 0, true)}")
轉換
需要轉換字串內容為大、小寫,可以使用下面範例程式說明的函式:
val name: String = "simon"
// 把第一個字元轉換為大寫
println("name.capitalize(): ${name.capitalize()}")
// 把第一個字元轉換為小寫
println("name.decapitalize(): ${name.decapitalize()}")
val URL = "http://www.CODEDATA.com.tw"
// 轉換為小寫
println("URL.toLowerCase(): ${URL.toLowerCase()}")
// 轉換為大寫
println("URL.toUpperCase(): ${URL.toUpperCase()}")
需要轉換字串內容為數字與邏輯型態,還有把字串轉換為字元陣列,可以使用下面範例程式說明的函式:
val intString = "35"
val doubleString = "72.5"
val booleanString = "true"
// 轉換字串為Int
val iv = intString.toInt()
// 轉換字串為Double
val dv = doubleString.toDouble()
// 轉換字串為Boolean
val bv = booleanString.toBoolean()
val intString2 = "Hello"
// 字串內容不是整數,執行以後會發生錯誤
// Exception in thread "main" java.lang.NumberFormatException:
// For input string: "Hello"
//val iv2 = intString2.toInt()
val name: String = "simon"
// 轉換為字元陣列
val ns = name.toCharArray()
for (c in ns) {
print(c)
}
println()
val ns2 = charArrayOf('x', 'x', 'x', 'x', 'x')
// 轉換為字元陣列,參數依照順序為:
// 儲存轉換結果的字元陣列
// 字元陣列的起始編號
// 字串的字元起始編號
// 字串的字元結束編號
// 轉換的字串的範圍從起始編號開始,字元個數為結束編號減起始編號
name.toCharArray(ns2, 0, 0, 3)
for (c in ns2) {
print(c)
}
內容
需要重複字串內容,為字串前、後補上指定數量的空白,或是移除特定的內容,可以使用下面範例程式說明的函式:
val name: String = "simon"
// 重複字串內容指定的次數
println("name.repeat(3): ${name.repeat(3)}")
// 如果字串的字元個數小於指定的數字,在前面補上空白
println("name2.padStart(5): [${name2.padStart(10)}]")
// 如果字串的字元個數小於指定的數字,在前面補上指定的字元
println("name2.padStart(5, '-'): [${name2.padStart(10, '-')}]")
// 如果字串的字元個數小於指定的數字,在後面補上空白
println("name2.padEnd(5): [${name2.padEnd(10)}]")
// 如果字串的字元個數小於指定的數字,在後面補上指定的字元
println("name2.padEnd(5, '-'): [${name2.padEnd(10, '-')}]")
val URL = "http://www.CODEDATA.com.tw"
// 移除字串前面指定的內容
println("URL.removePrefix(\"http://\"): ${URL.removePrefix("http://")}")
// 移除指定範圍的字元
println("URL.removeRange(0..6): ${URL.removeRange(0..6)}")
下一步
在瞭解基本、陣列與字串變數以後,接下來要說明物件變數的null值,這個主題在Java程式設計語言是很重要的,Kotlin提供很多與null值相關的改良,可以讓程式碼更加簡單而且不容易發生錯誤。
相關的檔案都可以在GitHub瀏覽與下載。
http://github.com/macdidi5/Kotlin-Tutorial
後續 >> Kotlin Tutorial(9)物件與null
|
林勝嘉
07/29
--轉換--
// 轉換為大寫
println("URL.toLowerCase(): ${URL.toLowerCase()}")
// 轉換為小寫
println("URL.toUpperCase(): ${URL.toUpperCase()}")
--------註解有誤-----------
toLowerCase() 這是轉換為小寫
toUpperCase() 這是轉換為大寫
chang eric
12/22
請問作者,
val ns2 = charArrayOf('x', 'x', 'x', 'x', 'x')
name.toCharArray(ns2, 0, 0, 3)
val不是定義成immutable variable嗎?為什麼toCharArray就可以改變內容?