Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 字符串模板与多行字符串

字符串模板与多行字符串

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

特点

  1. 比 Java 的字符串拼接更简洁
  2. 支持任意有效表达式
  3. 编译时会被优化为 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)

常用方法

  1. trimIndent():去除每行共同的缩进
  2. 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+  # 匹配单词字符
"""

最佳实践

  1. 优先使用字符串模板替代字符串拼接
  2. 复杂文本使用多行字符串提高可读性
  3. 对多行字符串使用 trimIndent() 保持代码整洁
  4. 需要保留缩进时考虑使用 trimMargin()
Last Updated:: 5/21/25, 7:58 PM