在 Kotlin 中格式化字串
本教程教授如何使用字串模板和 format()
方法在 Kotlin 中格式化字串。
在 Kotlin 中格式化字串
Kotlin 中的 string
類表示字串。Kotlin 中的所有字串都是 String
類的物件。
String
類的物件在 Java 中是不可變的,可以使用雙引號 ""
進行初始化。
格式化字串讓開發人員可以定義一個可用於多個物件的模板。在 Kotlin 中有兩種格式化字串的方法:String Templates
和 String.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,則進行遞迴呼叫,並將當前的 n
與 fact
函式相乘,並將 n-1
作為引數。在 main 方法中,我們為我們應該找到其階乘的 num
獲取使用者輸入。
在 println
中,我們使用 $num
來列印 num 的值,而在 ${fact(num)}
中,fact(num)
是一個有效的 Kotlin 表示式;因此,我們不會轉義雙引號。它返回 Int
值,該值通過 ${}
連線到字串。
字串模板解析器從最巢狀的模板開始解析它,並對其進行評估,直到形成結果。
在 Kotlin 中使用 String.format()
格式化字串
Kotlin 中的 String.format()
方法存在於 String
類中,並且是從 Java 中借用的。我們可以使用這種方法來預先定義一些特定字串的格式。
引數的數量必須等於格式說明符的數量;否則,會引發異常。
型別說明符:
我們可以在字串中使用儘可能多的說明符。這是說明符列表。
%b
- 布林值%c
- 字元%d
- 有符號整數%e
- 科學計數法中的浮點數%f
- 十進位制格式的浮點數%g
- 浮點數或科學記數法,取決於值%h
- 提供的引數的雜湊碼%n
- 換行符%o
- 八進位制整數(以 8 為底)%s
- 字串%t
- 日期或時間%x
- 十六進位制整數(以 16 為基數)
語法:
var my_str = String.format("Some text..%specifier_here", variables for specifiers)
使用 String
或 string
類的物件呼叫 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 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