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

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

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

相关推荐
事圆则缓5 小时前
Kotlin学习导航:从知识树走到项目与面试
android·开发语言·kotlin
mmsx20 小时前
Android 插件化架构:40 个 Gradle 模块的拆分、通信与共存
android·kotlin
mmsx21 小时前
Android 不改一行源码:用 AspectJ 做三类拦截
android·kotlin
熊猫钓鱼>_>1 天前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
事圆则缓1 天前
Kotlin 类型与空安全:从接口数据到页面状态
kotlin
墨天梦2 天前
D19_系统分享与文件URI
gitee·kotlin
应用市场2 天前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
hai_android2 天前
LiveEventBusCore 跨 Activity 通讯源码解析
android·kotlin·android jetpack
维克兜率天2 天前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin