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

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

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

相关推荐
每次的天空4 小时前
Kotlin 作用域函数:apply、let、run、with、also
android·开发语言·kotlin
QING6186 小时前
Kotlin containsAll用法及代码示例
android·kotlin·源码阅读
QING6186 小时前
Kotlin 协程库中 StateFlow 与 SharedFlow 的区别与使用指南
android·kotlin·app
QING6186 小时前
Kotlin component2用法及代码示例
android·kotlin·源码阅读
jiet_h16 小时前
深入解析Kapt —— Kotlin Annotation Processing Tool 技术博客
android·开发语言·kotlin
alexhilton16 小时前
实战:探索Jetpack Compose中的SearchBar
android·kotlin·android jetpack
高林雨露19 小时前
Java对比学习Kotlin的详细指南(一)
java·学习·kotlin
jiet_h20 小时前
深入解析KSP(Kotlin Symbol Processing):现代Android开发的新利器
android·开发语言·kotlin
从零开始学安卓1 天前
Kotlin(二) 单例的加载
前端·kotlin