kotlin字符串截取

xzbxzb 安卓 2026-01-14 30 0
Kotlin提供了多种灵活的字符串截取方式,既兼容Java风格的substring方法,也有更符合Kotlin简洁风格的便捷方法。下面按使用场景分类讲解:

一、基础截取:substring 方法

这是最通用的截取方式,Kotlin的substring兼容Java的用法,且索引从0开始。

1. 从指定索引截取到末尾

语法:str.substring(startIndex: Int)
fun main() {
    val str = "Hello Kotlin"
    // 从索引6开始截取(包含6),直到末尾
    val result = str.substring(6)
    println(result) // 输出:Kotlin
}

2. 截取指定索引范围(左闭右开)

语法:str.substring(startIndex: Int, endIndex: Int)
  • startIndex:起始索引(包含)

  • endIndex:结束索引(不包含)

fun main() {
    val str = "Hello Kotlin"
    // 截取索引0到5的字符(包含0,不包含5)
    val result = str.substring(0, 5)
    println(result) // 输出:Hello
}
注意:如果索引超出字符串长度,会抛出StringIndexOutOfBoundsException,建议使用前判断索引合法性:
fun safeSubstring(str: String, start: Int, end: Int): String {
    val safeStart = maxOf(0, start)
    val safeEnd = minOf(str.length, end)
    return if (safeStart < safeEnd) str.substring(safeStart, safeEnd) else ""
}

二、便捷截取:take/drop 系列(推荐)

Kotlin提供了更简洁、更安全的截取方法,无需担心索引越界:
方法
功能描述
示例(str = "Hello Kotlin")
take(n: Int)
截取前n个字符
str.take(5) → "Hello"
takeLast(n: Int)
截取最后n个字符
str.takeLast(6) → "Kotlin"
drop(n: Int)
丢弃前n个字符,返回剩余部分
str.drop(6) → "Kotlin"
dropLast(n: Int)
丢弃最后n个字符,返回剩余部分
str.dropLast(6) → "Hello "
示例代码:
fun main() {
    val str = "Hello Kotlin"
    
    val takeResult = str.take(5) // 前5个字符
    val takeLastResult = str.takeLast(6) // 最后6个字符
    val dropResult = str.drop(6) // 丢弃前6个
    val dropLastResult = str.dropLast(6) // 丢弃最后6个
    
    println(takeResult) // Hello
    println(takeLastResult) // Kotlin
    println(dropResult) // Kotlin
    println(dropLastResult) // Hello 
}

三、按分隔符截取:substringBefore/After 系列

适合按特定字符/字符串分割截取,比如处理路径、URL、拼接字符串等场景:
方法
功能描述
示例(str = "user:123456:admin")
substringBefore(delimiter)
截取第一个分隔符之前的部分
str.substringBefore(":") → "user"
substringAfter(delimiter)
截取第一个分隔符之后的部分
str.substringAfter(":") → "123456:admin"
substringBeforeLast(delimiter)
截取最后一个分隔符之前的部分
str.substringBeforeLast(":") → "user:123456"
substringAfterLast(delimiter)
截取最后一个分隔符之后的部分
str.substringAfterLast(":") → "admin"
示例代码:
fun main() {
    val str = "user:123456:admin"
    
    val beforeFirst = str.substringBefore(":") // 第一个:之前
    val afterLast = str.substringAfterLast(":") // 最后一个:之后
    
    println(beforeFirst) // user
    println(afterLast) // admin
}

总结

  1. 基础截取:substring 适合精确控制索引范围,但需手动处理索引越界问题;

  2. 便捷截取:take/drop 系列更简洁安全,优先推荐日常使用;

  3. 分隔符截取:substringBefore/After 系列专为按分隔符截取设计,场景适配性更强。

所有截取方法返回的都是新字符串(Kotlin字符串不可变),原字符串不会被修改。


 您阅读本篇文章共花了: 

版权声明

本文章如果涉及侵权,请联系我。
部分文章系本人原创未经许可,不得转载。

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址