简介
Kotlin 的 字符串模板(String Templates) 是一种简洁且强大的字符串拼接机制,通过直接嵌入变量或表达式来构建动态字符串。相比 Java 的字符串拼接(+
或 String.format
),Kotlin 的语法更加直观且类型安全。
1、基础语法
1.1 变量嵌入($
符号)
直接在字符串中使用 $变量名
嵌入变量值:
ini
kotlinCopy Code
val name = "Alice"
val age = 30
val message = "Name: $name, Age: $age" // 输出:Name: Alice, Age: 30
1.2 表达式嵌入(${}
语法)
对于复杂表达式(如运算、方法调用等),使用 ${表达式}
:
ini
kotlinCopy Code
val price = 9.99
val taxRate = 0.2
val total = "Total: $${price * (1 + taxRate)}" // 输出:Total: $11.988
// 若不加花括号,需转义 $:val total = "Total: $${price * (1 + taxRate)
2 高级特性
2.1 多行字符串(Triple-Quoted Strings)
用 """
定义多行原始字符串,保留所有格式(包括换行和缩进) :
ini
kotlinCopy Code
val json = """
{
"name": "$name",
"age": $age
}
""".trimIndent() // 使用 trimIndent() 删除每行前的公共缩进
2.2 边界控制(trimMargin
或自定义分隔符)
在多行字符串中,通过 |
(默认)或其他符号对齐文本:
ini
kotlinCopy Code
val text = """
|Kotlin
|Java
|Python
""".trimMargin() // 删除每行前的 | 及之前的空格
// 输出:
// Kotlin
// Java
// Python
2.3 原生字符串(Raw Strings)
在 """
中,无需转义特殊字符 (如 \n
、\t
):
ini
kotlinCopy Code
val path = """C:\Users\Alice\Documents""" // 无需转义反斜杠
2.4 动态模板与函数调用
在模板中调用函数或访问对象属性:
kotlin
kotlinCopy Code
data class User(val firstName: String, val lastName: String)
val user = User("Alice", "Smith")
val fullName = "Full Name: ${user.firstName} ${user.lastName.toUpperCase()}"
// 输出:Full Name: Alice SMITH
3 转义与特殊字符处理
3.1 输出 $
符号
在普通字符串(" "
)中,需用 $
转义:
ini
kotlinCopy Code
val priceText = "Price: $10" // 输出:Price: $10
在多行原始字符串("""
)中,直接写 $
:
ini
kotlinCopy Code
val rawPrice = """
Price: $10
Tax: $2
"""
3.2 混合使用转义字符
在普通字符串中,支持标准转义(如 \n
、\t
):
ini
kotlinCopy Code
val escaped = "Line 1\nLine 2\tTabbed"
4 性能优化
4.1 编译优化
Kotlin 编译器会将字符串模板转换为 StringBuilder
操作,避免多次创建中间字符串对象:
ini
kotlinCopy Code
// Kotlin 代码:
val result = "Hello, $name! Your score is ${score * 100}%."
// 等效的 Java 字节码:
StringBuilder sb = new StringBuilder();
sb.append("Hello, ");
sb.append(name);
sb.append("! Your score is ");
sb.append(score * 100);
sb.append("%.");
String result = sb.toString();
4.2 避免循环中的重复拼接
在循环中多次拼接字符串时,**显式使用 StringBuilder
**:
scss
kotlinCopy Code
val list = listOf(1, 2, 3)
val sb = StringBuilder()
for (num in list) {
sb.append("Number: $num\n")
}
val output = sb.toString()
5 对比 Java
场景 | Kotlin 写法 | Java 写法 |
---|---|---|
变量拼接 | "Value: $value" |
"Value: " + value |
复杂表达式 | "Sum: ${a + b}" |
"Sum: " + (a + b) |
多行文本 | """Line 1\nLine 2""" |
"Line 1\nLine 2" 或 String.join |
格式控制(如保留小数) | "Price: ${"%.2f".format(price)}" |
String.format("Price: %.2f", price) |
6、实用示例
6.1 生成动态 SQL 查询
val
val query = """
SELECT * FROM $tableName
WHERE age > $minAge
AND name LIKE '%${searchTerm.trim()}%'
""".trimIndent()
总结
Kotlin 的字符串模板通过以下特性大幅提升开发效率:
- 简洁性:直接嵌入变量,无需冗余的拼接符。
- 可读性:多行字符串和格式控制更直观。
- 类型安全:编译时检查表达式类型,避免运行时错误。
- 灵活性:支持原生字符串、复杂表达式和函数调用。
合理利用字符串模板,可以显著减少代码量并提高可维护性。