Kotlin之字符串模板

简介

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 的字符串模板通过以下特性大幅提升开发效率:

  • ‌简洁性‌:直接嵌入变量,无需冗余的拼接符。
  • ‌可读性‌:多行字符串和格式控制更直观。
  • ‌类型安全‌:编译时检查表达式类型,避免运行时错误。
  • ‌灵活性‌:支持原生字符串、复杂表达式和函数调用。

合理利用字符串模板,可以显著减少代码量并提高可维护性。

相关推荐
ai2work4 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
ai2work5 天前
ch21 签名、校验与发版
kotlin
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
Android打工仔5 天前
Kotlin 协程源码解析:协程是如何切换线程的?
android·kotlin
ai2work5 天前
附录 D 速查索引与阅读指南
kotlin
ai2work5 天前
ch22 诊断方法论:三个真实事故的根因分析
kotlin
Kapaseker5 天前
你有搞明白 Volatile 什么意思吗?
android·kotlin
alexhilton5 天前
藏在设备上的秘密,终究藏不住
android·kotlin·android jetpack
ai2work5 天前
ch15 加载模型与初始化上下文
kotlin
hai_android5 天前
Kotlin / Android 常用函数使用示例手册
android·java·kotlin