跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kotlin多行字符串
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kotlin多行字符串}} '''Kotlin多行字符串'''是Kotlin语言中用于处理包含换行符或复杂格式文本的特殊字符串类型。它通过'''三重引号(<code>"""</code>)'''语法实现,避免了传统字符串中繁琐的转义字符需求,特别适合处理SQL查询、HTML模板或格式化文本等场景。 == 基本语法 == Kotlin的多行字符串使用三个双引号定义,其内容会'''原样保留所有换行和缩进''': <syntaxhighlight lang="kotlin"> val multilineString = """ This is a multiline string Line breaks and spaces are preserved exactly. """ println(multilineString) </syntaxhighlight> '''输出结果:''' <pre> This is a multiline string Line breaks and spaces are preserved exactly. </pre> 注意:多行字符串的'''起始和结束引号必须单独成行''',且内容缩进以结束引号的位置为基准。 == 去除前导空白 == 使用<code>trimIndent()</code>函数可自动去除所有行的'''共同最小缩进''': <syntaxhighlight lang="kotlin"> val indentedText = """ First line Second line """.trimIndent() println(indentedText) </syntaxhighlight> '''输出结果:''' <pre> First line Second line </pre> == 边缘对齐控制 == 通过<code>trimMargin()</code>函数和指定的边界字符(默认为<code>|</code>)控制对齐: <syntaxhighlight lang="kotlin"> val marginText = """ |Left-aligned | With indentation """.trimMargin() println(marginText) </syntaxhighlight> '''输出结果:''' <pre> Left-aligned With indentation </pre> == 字符串模板支持 == 多行字符串完全支持Kotlin的'''字符串模板'''功能: <syntaxhighlight lang="kotlin"> val name = "Alice" val greeting = """ Hello, $name! Today is ${java.time.LocalDate.now()} """.trimIndent() println(greeting) </syntaxhighlight> '''示例输出(日期会变化):''' <pre> Hello, Alice! Today is 2023-08-20 </pre> == 实际应用案例 == === 场景1:SQL查询构建 === <syntaxhighlight lang="kotlin"> val userId = 42 val query = """ SELECT * FROM users WHERE id = $userId AND status = 'ACTIVE' """.trimIndent() </syntaxhighlight> === 场景2:HTML模板 === <syntaxhighlight lang="kotlin"> fun createEmailTemplate(name: String): String { return """ <html> <body> <h1>Hello, $name!</h1> <p>Thank you for registering.</p> </body> </html> """.trimIndent() } </syntaxhighlight> == 高级技巧 == === 自定义边界标记 === 可以指定任意字符作为<code>trimMargin</code>的分隔符: <syntaxhighlight lang="kotlin"> val customMargin = """ #Line 1 # Line 2 """.trimMargin("#") </syntaxhighlight> === 原始字符串与转义符 === 多行字符串内依然可以使用转义符,但需注意: * 反斜杠<code>\</code>仍作为转义字符 * 如需包含<code>"""</code>则必须转义:<code>\"""</code> <syntaxhighlight lang="kotlin"> val escaped = """ This shows a \n newline symbol And a triple quote: \""" """ </syntaxhighlight> == 性能考虑 == 多行字符串在编译时会被转换为普通字符串常量,与单行字符串相比: * '''内存占用''':相同内容下无显著差异 * '''编译时间''':处理复杂多行字符串可能略微增加编译时间 * '''运行时性能''':完全一致 == 与其他语言对比 == {| class="wikitable" |- ! 特性 !! Kotlin !! Java !! Python |- | 语法标记 || <code>"""</code> || <code>"""</code>(Java 15+) || <code>"""</code>或<code>'''</code> |- | 缩进处理 || <code>trimIndent()</code> || <code>String.stripIndent()</code> || 自动去除共同缩进 |- | 边界控制 || <code>trimMargin()</code> || 无内置支持 || 无内置支持 |} == 常见问题 == === 问题1:如何包含前导/后置空行? === 在开始/结束引号后直接换行即可: <syntaxhighlight lang="kotlin"> val withEmptyLines = """ Actual content starts here """ </syntaxhighlight> === 问题2:为什么我的缩进没有正确去除? === 确保所有行的缩进一致,且不超过结束引号的位置。使用IDE的自动格式化功能可避免此问题。 == 最佳实践 == * 优先使用<code>trimIndent()</code>而非手动调整缩进 * 复杂模板考虑使用专门的模板引擎(如Kotlinx.HTML) * 超过50行的文本建议提取到外部资源文件 * 需要频繁修改的内容考虑使用'''字符串构建器'''模式 == 延伸阅读 == * [[Kotlin官方文档-字符串]](外部链接) * [[Effective Kotlin]]中关于字符串处理的建议(外部链接) [[Category:编程语言]] [[Category:Kotlin]] [[Category:Kotlin字符串]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)