在 Kotlin 中格式化字串

Niyati Thakkar 2023年1月30日
  1. 在 Kotlin 中格式化字串
  2. 在 Kotlin 中使用字串模板格式化字串
  3. 在 Kotlin 中使用 String.format() 格式化字串
在 Kotlin 中格式化字串

本教程教授如何使用字串模板和 format() 方法在 Kotlin 中格式化字串。

在 Kotlin 中格式化字串

Kotlin 中的 string 類表示字串。Kotlin 中的所有字串都是 String 類的物件。

String 類的物件在 Java 中是不可變的,可以使用雙引號 "" 進行初始化。

格式化字串讓開發人員可以定義一個可用於多個物件的模板。在 Kotlin 中有兩種格式化字串的方法:String TemplatesString.format() 方法。

在 Kotlin 中使用字串模板格式化字串

字串模板允許我們將變數值和返回值的函式直接插入 String。在提及表示式之前使用 $(美元)符號。

它計算表示式並將結果連線到字串。

讓我們看一下語法和示例,以更好地理解字串模板。

語法:

// for variable
var var_name : String = "Enter any text..$var1"
// for function
var var_name : String = "Enter any text..${function here}"

讓我們看一個通過包含使用者名稱來列印歡迎訊息的示例。

fun main(){
    println("Enter your Name")
    var name = readLine()
    // printing name using String Template
    var welcome_message = "Welcome to Kotlin Strings! $name"
    println(welcome_message)
}

我們首先詢問使用者他們的姓名並將其儲存在 name 變數中。該變數稍後在 welcome_message 中使用 $(美元)符號將名稱變數的值連線到字串。

輸出:

Enter your Name
Programmer
Welcome to Kotlin Strings! Programmer

正如我們在輸出中看到的,列印的是使用者名稱而不是"$name"。因此,我們不需要中斷字串流來插入變數的值。

我們可以在變數名前使用 $ 符號附加它們。

同樣,我們也可以在字串初始化中使用函式。讓我們以階乘為例。

// function to calculate factorial
fun fact(n : Int) : Int{
    if(n==0 || n==1) return 1
    return n*fact(n-1)
}

// main function
fun main(){
    println("Enter number")
    var num =-1

    // reading user input
    num = Integer.parseInt(readLine())

    // using function in string
    println("Factorial of $num = ${fact(num)}")
}

輸出:

Enter number
5
Factorial of 5 = 120

和上面的例子一樣,我們首先建立了一個函式來計算給定數字的階乘。如果數字是 0 或 1,則返回 1。

如果數字大於 1,則進行遞迴呼叫,並將當前的 nfact 函式相乘,並將 n-1 作為引數。在 main 方法中,我們為我們應該找到其階乘的 num 獲取使用者輸入。

println 中,我們使用 $num 來列印 num 的值,而在 ${fact(num)} 中,fact(num) 是一個有效的 Kotlin 表示式;因此,我們不會轉義雙引號。它返回 Int 值,該值通過 ${} 連線到字串。

字串模板解析器從最巢狀的模板開始解析它,並對其進行評估,直到形成結果。

在 Kotlin 中使用 String.format() 格式化字串

Kotlin 中的 String.format() 方法存在於 String 類中,並且是從 Java 中借用的。我們可以使用這種方法來預先定義一些特定字串的格式。

引數的數量必須等於格式說明符的數量;否則,會引發異常。

型別說明符:

我們可以在字串中使用儘可能多的說明符。這是說明符列表。

  1. %b - 布林值
  2. %c - 字元
  3. %d - 有符號整數
  4. %e - 科學計數法中的浮點數
  5. %f - 十進位制格式的浮點數
  6. %g - 浮點數或科學記數法,取決於值
  7. %h - 提供的引數的雜湊碼
  8. %n - 換行符
  9. %o - 八進位制整數(以 8 為底)
  10. %s - 字串
  11. %t - 日期或時間
  12. %x - 十六進位制整數(以 16 為基數)

語法:

var my_str = String.format("Some text..%specifier_here", variables for specifiers)

使用 Stringstring 類的物件呼叫 String.format()。它以相同順序將包含說明符和變數的字串作為主要字串作為引數。

它返回定義的 String。如果說明符不匹配或說明符不等於變數的數量,它也會引發異常。

讓我們看一個 String.format() 的示例,以顯示學生的各種詳細資訊。

fun main(){
// studnt details
    var name = "Taylor Swift"
    var roll_no = 4676
    var percentage = 96.3
    var grade = 'A'
    var school = "Delhi Public School"
    // formating using String.format() method
    var student_data = String.format("Name: %s%nRoll No.: %d%nPercentage: %.2f%%%nGrade: %c%nSchool Name: %s", name, roll_no, percentage, grade, school)
    println(student_data)
}

輸出:

Name: Taylor Swift
Roll No.: 4676
Percentage: 96.30%
Grade: A
School Name: Delhi Public School

學生的所有詳細資訊都儲存在變數中。我們使用型別說明符將變數連線到字串。

第一個 %s 指的是一個字串變數,即名稱。 %d 指的是一個整數值,即 roll_no 等等。

%n 用於下一行。此外,為了在輸出中列印%符號,我們在程式碼中使用了%%來表示百分比。

%.2f 用於精度,即小數點後的位數,在這種情況下為 2。

我們還可以定義預設格式。除了在 String.format() 中使用字串,我們可以建立一個 String 類物件,例如 obj_str,並使用它來格式化和列印字串中的各種變數。

讓我們舉一個地圖的例子,我們儲存如何用不同的語言打招呼,其中鍵是特定語言的 hello,值是語言的名稱。

fun main(){

    var say_hello = mapOf(
                            "Hello" to "English",
                            "Goedendag" to "Dutch",
                            "Namaste" to "Hindi",
                            "Bonjour" to "French",
                            "Hola" to "Spanish"
                     )
    // defining default format
    var string_format = "%s\t - %s%n"
    println("Greetings\tLanguage")
    // printing contenets of map using default format
    for((k, v) in say_hello)
        print(string_format.format(k,v))
}

輸出:

Greetings	Language
Hello	 - English
Goedendag	 - Dutch
Namaste	 - Hindi
Bonjour	 - French
Hola	 - Spanish

在上面的示例中,我們為名為 string_format 的字串定義了一種格式,我們使用列印 key、tab、dash(-),每個鍵值對的值和下一行。

作者: Niyati Thakkar
Niyati Thakkar avatar Niyati Thakkar avatar

Niyati is a Technical Content Writer and an engineering student. She has written more than 50 published articles on Data Structures, Algorithms, Git, DBMS, and Programming Languages like Python, C/C++, Java, CSS, HTML, KOTLIN, JavaScript, etc. that are very easy-to-understand and visualize.

LinkedIn

相關文章 - Kotlin String