跳转到内容

Kotlin原始字符串

来自代码酷

Kotlin原始字符串[编辑 | 编辑源代码]

原始字符串(Raw String)是Kotlin中一种特殊的字符串字面量,允许直接包含换行符和特殊字符而无需转义。它通过三重双引号("""定义,常用于多行文本、正则表达式或需要保留原始格式的场景。

基本语法[编辑 | 编辑源代码]

原始字符串的语法如下:

val rawString = """这是原始字符串
    可以包含换行符
    和特殊字符如 \n(不会被转义)"""

输出结果:

这是原始字符串
    可以包含换行符
    和特殊字符如 \n(不会被转义)

注意:

  • 原始字符串中的换行符和缩进会被原样保留。
  • 反斜杠(\)不再作为转义字符使用。

与普通字符串对比[编辑 | 编辑源代码]

原始字符串 vs 普通字符串
特性 原始字符串 普通字符串
定义方式 """...""" "..."
换行符 直接包含 需用\n
转义字符 不生效 生效
缩进 保留 忽略

实际应用案例[编辑 | 编辑源代码]

案例1:多行文本[编辑 | 编辑源代码]

处理HTML或SQL语句时,原始字符串能显著提升可读性:

val html = """
    <html>
        <body>
            <p>Hello World</p>
        </body>
    </html>
""".trimIndent()

输出结果:

<html>
    <body>
        <p>Hello World</p>
    </body>
</html>

案例2:正则表达式[编辑 | 编辑源代码]

正则表达式常包含大量需转义的字符,原始字符串更简洁:

val regex = """\d{3}-\d{2}-\d{4}""".toRegex()  // 匹配SSN格式
println(regex.matches("123-45-6789"))  // 输出:true

案例3:JSON/XML模板[编辑 | 编辑源代码]

生成结构化数据时无需拼接字符串:

val jsonTemplate = """
    {
        "name": "$name",
        "age": $age
    }
""".trimIndent()

高级特性[编辑 | 编辑源代码]

边界控制[编辑 | 编辑源代码]

通过|管道符定义边界可对齐多行文本:

val alignedText = """
    |Kotlin
    |Java
    |Python
""".trimMargin()

输出结果:

Kotlin
Java
Python

动态插入值[编辑 | 编辑源代码]

原始字符串支持字符串模板(${expression}):

val lang = "Kotlin"
val message = """
    Welcome to $lang!
    Today is ${java.time.LocalDate.now()}
"""

数学公式支持[编辑 | 编辑源代码]

当需要嵌入数学表达式时: E=mc2

视觉化表示[编辑 | 编辑源代码]

原始字符串结构示意图:

graph LR A[三重引号开始] --> B[原样保留内容] B --> C[三重引号结束] C --> D[可选trim处理]

注意事项[编辑 | 编辑源代码]

1. 原始字符串的缩进以结束引号的位置为基准 2. 如需去除前导空格,使用trimIndent()trimMargin() 3. 字符串模板仍会被求值(如$variable

总结[编辑 | 编辑源代码]

原始字符串是Kotlin提供的强大特性,特别适合处理需要保持原始格式的文本内容。通过避免转义字符的复杂性,它能显著提升代码的可读性和维护性,是多行文本、模板和正则表达式场景的理想选择。