Kotlin 字符串 #

一、字符串基础 #

1.1 字符串声明 #

kotlin
val str1: String = "Hello"
val str2 = "Kotlin"

// 空字符串
val empty = ""
val blank = "   "

// 使用 String 构造函数
val chars = charArrayOf('H', 'i')
val str3 = String(chars)  // "Hi"

1.2 字符串不可变 #

Kotlin 字符串是不可变的:

kotlin
val str = "Hello"
// str[0] = 'h'  // 错误:不能修改

// 创建新字符串
val newStr = "h" + str.substring(1)

1.3 访问字符 #

kotlin
val str = "Kotlin"

// 通过索引访问
val char = str[0]    // 'K'
val last = str[str.length - 1]  // 'n'

// 使用 get 方法
val char2 = str.get(1)  // 'o'

// 安全访问
val safe = str.getOrNull(10)  // null

二、字符串模板 #

2.1 变量模板 #

使用 $ 插入变量:

kotlin
val name = "Kotlin"
val age = 10

println("Name: $name")        // Name: Kotlin
println("Age: $age")          // Age: 10

2.2 表达式模板 #

使用 ${} 插入表达式:

kotlin
val a = 10
val b = 20

println("Sum: ${a + b}")              // Sum: 30
println("Average: ${(a + b) / 2}")    // Average: 15

val name = "Kotlin"
println("Length: ${name.length}")     // Length: 6
println("Upper: ${name.uppercase()}") // Upper: KOTLIN

2.3 原始字符串中的模板 #

kotlin
val name = "Kotlin"
val text = """
    Hello, $name!
    Welcome to Kotlin.
""".trimIndent()

println(text)

2.4 转义美元符号 #

kotlin
val price = "Price: \$100"
println(price)  // Price: $100

// 或使用表达式
val price2 = "Price: ${'$'}100"

三、多行字符串 #

3.1 原始字符串 #

使用三引号 """ 创建多行字符串:

kotlin
val text = """
    Line 1
    Line 2
    Line 3
"""

println(text)

3.2 trimIndent #

去除公共前导空格:

kotlin
val text = """
    |Line 1
    |Line 2
    |Line 3
""".trimIndent()

println(text)

3.3 trimMargin #

使用边界符去除缩进:

kotlin
val text = """
    |Line 1
    |Line 2
    |Line 3
""".trimMargin()

// 自定义边界符
val text2 = """
    >Line 1
    >Line 2
    >Line 3
""".trimMargin(">")

3.4 保留格式 #

kotlin
val json = """
    {
        "name": "Kotlin",
        "version": 1.9
    }
""".trimIndent()

println(json)

四、字符串操作 #

4.1 拼接 #

kotlin
val str1 = "Hello"
val str2 = "World"

// 使用 +
val result = str1 + " " + str2  // "Hello World"

// 使用 joinToString
val list = listOf("A", "B", "C")
val joined = list.joinToString(", ")  // "A, B, C"

// 使用 StringBuilder
val sb = StringBuilder()
sb.append("Hello")
sb.append(" ")
sb.append("World")
val built = sb.toString()

4.2 分割 #

kotlin
val str = "A,B,C,D"

// 基本分割
val parts = str.split(",")  // ["A", "B", "C", "D"]

// 限制分割数量
val limited = str.split(",", limit = 2)  // ["A", "B,C,D"]

// 正则分割
val regex = str.split(Regex("[,;]"))

// 分割为行
val lines = "Line1\nLine2\nLine3".lines()

4.3 子字符串 #

kotlin
val str = "Hello, Kotlin!"

// 使用范围
val sub1 = str.substring(0, 5)   // "Hello"
val sub2 = str.substring(7)      // "Kotlin!"

// 使用 until
val sub3 = str.substring(0 until 5)  // "Hello"

// 使用 take/drop
val first5 = str.take(5)     // "Hello"
val last7 = str.takeLast(7)  // "Kotlin!"
val drop5 = str.drop(7)      // "Kotlin!"
val dropLast = str.dropLast(1)  // "Hello, Kotlin"

// 使用 substringBefore/After
val before = str.substringBefore(",")   // "Hello"
val after = str.substringAfter(",")     // " Kotlin!"
val beforeLast = str.substringBeforeLast("o")  // "Hello, K"
val afterLast = str.substringAfterLast("o")    // "tlin!"

4.4 替换 #

kotlin
val str = "Hello, World!"

// 简单替换
val replaced = str.replace("World", "Kotlin")

// 替换第一个
val first = str.replaceFirst("o", "0")

// 正则替换
val regex = str.replace(Regex("[aeiou]"), "*")

// 删除字符
val removed = str.removeSuffix("!")
val removed2 = str.removePrefix("Hello, ")

4.5 大小写转换 #

kotlin
val str = "Hello Kotlin"

str.uppercase()           // "HELLO KOTLIN"
str.lowercase()           // "hello kotlin"
str.capitalize()          // "Hello kotlin"(已废弃)
str.decapitalize()        // "hello Kotlin"(已废弃)
str.titlecase()           // "Hello Kotlin"

4.6 去除空白 #

kotlin
val str = "  Hello  "

str.trim()           // "Hello"
str.trimStart()      // "Hello  "
str.trimEnd()        // "  Hello"

// 去除指定字符
val str2 = "***Hello***"
str2.trim('*')       // "Hello"

// 去除满足条件的字符
val str3 = "123Hello456"
str3.trim { it.isDigit() }  // "Hello"

五、字符串查找 #

5.1 包含检查 #

kotlin
val str = "Hello, Kotlin"

str.contains("Kotlin")     // true
str.contains("kotlin", ignoreCase = true)  // true
"Kotlin" in str            // true

5.2 前缀后缀 #

kotlin
val str = "Hello.kt"

str.startsWith("Hello")    // true
str.endsWith(".kt")        // true

str.startsWith("hello", ignoreCase = true)  // true

5.3 查找索引 #

kotlin
val str = "Hello, Kotlin"

str.indexOf("o")           // 4
str.lastIndexOf("o")       // 8
str.indexOf("z")           // -1

// 从指定位置开始查找
str.indexOf("o", 5)        // 8

// 正则查找
str.indexOf(Regex("[0-9]"))

六、字符串判断 #

6.1 空白判断 #

kotlin
val str = "   "

str.isEmpty()      // false(非空字符串)
str.isBlank()      // true(全是空白)
str.isNotEmpty()   // true
str.isNotBlank()   // false

6.2 内容判断 #

kotlin
val str = "12345"

str.matches(Regex("[0-9]+"))  // true
str.all { it.isDigit() }      // true
str.any { it.isLetter() }     // false

6.3 相等判断 #

kotlin
val a = "Kotlin"
val b = "Kotlin"
val c = "kotlin"

a == b                    // true(内容相等)
a == c                    // false
a.equals(c, ignoreCase = true)  // true

// 引用相等
a === b  // 可能 true(字符串常量池)

七、字符串与数值转换 #

7.1 字符串转数值 #

kotlin
"123".toInt()              // 123
"123".toLong()             // 123L
"3.14".toFloat()           // 3.14f
"3.14".toDouble()          // 3.14

// 安全转换
"abc".toIntOrNull()        // null
"123".toIntOrNull()        // 123

// 进制转换
"FF".toInt(16)             // 255
"1010".toInt(2)            // 10

7.2 数值转字符串 #

kotlin
val num = 123

num.toString()             // "123"
num.toString(2)            // "1111011"(二进制)
num.toString(16)           // "7b"(十六进制)

// 格式化
String.format("%04d", 5)   // "0005"
String.format("%.2f", 3.14159)  // "3.14"

八、字符串格式化 #

8.1 format 函数 #

kotlin
val name = "Kotlin"
val age = 10

val formatted = "Name: %s, Age: %d".format(name, age)
// "Name: Kotlin, Age: 10"

// 使用 String.format
val formatted2 = String.format("Name: %s, Age: %d", name, age)

8.2 格式说明符 #

格式符 说明 示例
%s 字符串 “Kotlin”
%d 整数 123
%f 浮点数 3.14
%.2f 保留2位小数 3.14
%x 十六进制 7b
%o 八进制 173
%b 布尔值 true
%c 字符 K
%% 百分号 %
kotlin
val price = 99.99
val count = 5

println("Price: %.2f".format(price))       // Price: 99.99
println("Count: %03d".format(count))       // Count: 005
println("Hex: %x".format(255))             // Hex: ff

九、正则表达式 #

9.1 创建正则表达式 #

kotlin
// 使用 Regex 构造函数
val regex1 = Regex("[0-9]+")

// 使用 toRegex 扩展函数
val regex2 = "[0-9]+".toRegex()

// 使用原始字符串
val regex3 = Regex("""\d+""")

9.2 匹配操作 #

kotlin
val regex = Regex("[0-9]+")
val str = "123"

regex.matches(str)       // true(完全匹配)
regex.containsMatchIn("abc123")  // true(部分匹配)

// 查找匹配
val result = regex.find("abc123def")
result?.value  // "123"

// 查找所有匹配
val all = regex.findAll("a1b2c3")
all.map { it.value }.toList()  // ["1", "2", "3"]

9.3 替换操作 #

kotlin
val regex = Regex("[0-9]+")
val str = "a1b2c3"

regex.replace(str, "X")  // "aXbXcX"

// 使用函数替换
regex.replace(str) { 
    "[${it.value}]" 
}  // "a[1]b[2]c[3]"

9.4 分割操作 #

kotlin
val regex = Regex("[,;]")
val str = "a,b;c"

regex.split(str)  // ["a", "b", "c"]

十、常用字符串函数 #

10.1 统计函数 #

kotlin
val str = "Hello Kotlin"

str.length           // 12
str.count()          // 12
str.count { it == 'l' }  // 3

10.2 反转 #

kotlin
val str = "Kotlin"
str.reversed()       // "niltoK"

10.3 重复 #

kotlin
val str = "Hi"
str.repeat(3)        // "HiHiHi"

10.4 填充 #

kotlin
val str = "5"

str.padStart(3, '0')  // "005"
str.padEnd(3, '0')    // "500"
str.center(5, '*')    // "**5**"(需要扩展函数)

十一、总结 #

字符串操作要点:

  1. 字符串模板$变量${表达式}
  2. 多行字符串:使用 """trimIndent()
  3. 常用操作:分割、替换、查找、截取
  4. 正则表达式:使用 Regex

下一步,让我们学习 条件表达式

最后更新:2026-03-27