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

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

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

相关推荐
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z3 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream4 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam4 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker4 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc5 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景5 天前
kotlin协程学习小计
android·kotlin
Kapaseker5 天前
你搞得懂这 15 个 Android 架构问题吗
android·kotlin
zh_xuan5 天前
kotlin 高阶函数用法
开发语言·kotlin