字符串模板与多行字符串
1. 字符串模板
在 Kotlin 中,字符串模板(String Templates)是一种方便的方式,允许在字符串中直接嵌入变量或表达式。语法规则如下:
- 使用
$变量名插入变量值 - 使用
${表达式}插入表达式结果
示例代码
val name = "Alice"
val age = 25
// 简单变量插入
println("Hello, $name!") // 输出:Hello, Alice!
// 表达式插入
println("Next year you'll be ${age + 1} years old") // 输出:Next year you'll be 26 years old
// 复杂表达式
val price = 12.5
val quantity = 3
println("Total: ${price * quantity}") // 输出:Total: 37.5
特点
- 比 Java 的字符串拼接更简洁
- 支持任意有效表达式
- 编译时会被优化为
StringBuilder操作
2. 多行字符串
Kotlin 使用三重引号 """ 定义多行字符串(Raw Strings),特点包括:
- 保留所有换行和缩进
- 不需要转义特殊字符(如
\n,\t等) - 常用于 SQL 语句、HTML 模板等场景
基本用法
val multiLineText = """
This is a multi-line string.
It preserves all line breaks
and whitespace exactly as written.
Special chars like \n appear literally.
""".trimIndent()
println(multiLineText)
常用方法
trimIndent():去除每行共同的缩进trimMargin():以指定字符(默认为|)作为对齐边界
trimMargin 示例
val code = """
|fun main() {
| println("Hello")
|}
""".trimMargin()
println(code)
/* 输出:
fun main() {
println("Hello")
}
*/
3. 字符串模板与多行字符串结合
两者可以配合使用,实现动态的多行文本生成:
val user = "Bob"
val items = listOf("Apple", "Banana", "Orange")
val receipt = """
Customer: $user
Purchased Items:
${items.joinToString("\n ") { "- $it" }}
Total: ${items.size} items
""".trimIndent()
println(receipt)
/* 输出:
Customer: Bob
Purchased Items:
- Apple
- Banana
- Orange
Total: 3 items
*/
4. 转义字符处理
在普通字符串(用双引号包裹)中仍需使用转义字符:
val path = "C:\\Users\\Name\\file.txt" // 需要转义反斜杠
但在多行字符串中可以直接书写:
val regexPattern = """
\d+ # 匹配数字
\w+ # 匹配单词字符
"""
最佳实践
- 优先使用字符串模板替代字符串拼接
- 复杂文本使用多行字符串提高可读性
- 对多行字符串使用
trimIndent()保持代码整洁 - 需要保留缩进时考虑使用
trimMargin()
