Kotlin Tutorial(8)字串 by Michael | CodeData
top

Kotlin Tutorial(8)字串

分享:
tags: kotlin String

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

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

林勝嘉07/29

--轉換--
// 轉換為大寫
println("URL.toLowerCase(): ${URL.toLowerCase()}")
// 轉換為小寫
println("URL.toUpperCase(): ${URL.toUpperCase()}")

--------註解有誤-----------


toLowerCase() 這是轉換為小寫

toUpperCase() 這是轉換為大寫

chang eric12/22

請問作者,

val ns2 = charArrayOf('x', 'x', 'x', 'x', 'x')

name.toCharArray(ns2, 0, 0, 3)

val不是定義成immutable variable嗎?為什麼toCharArray就可以改變內容?

熱門論壇文章

熱門技術文章