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

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

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

相关推荐
每次的天空3 小时前
Android-重学kotlin(协程源码第二阶段)新学习总结
android·学习·kotlin
stevenzqzq3 小时前
Kotlin 中主构造函数和次构造函数的区别
android·kotlin
开发者如是说6 小时前
言叶是如何对文件进行端到端加密的
android·kotlin·swift
小李飞飞砖7 小时前
kotlin
开发语言·单例模式·kotlin
小李飞飞砖7 小时前
kotlin中的冷流和热流
android·开发语言·kotlin
Kotlin上海用户组1 天前
Koin vs. Hilt——最流行的 Android DI 框架全方位对比
android·架构·kotlin
Kapaseker1 天前
当Object遇到Json你可能会碰到的坑
kotlin
RichardLai881 天前
Kotlin Flow:构建响应式流的现代 Kotlin 之道
android·前端·kotlin
程序员江同学1 天前
Kotlin/Native 编译流程浅析
android·kotlin
移动开发者1号1 天前
Kotlin协程与响应式编程深度对比
android·kotlin