如何使用Kotlin String的get方法批量获取多个字符?
解决方案:Kotlin中一次获取字符串多个指定索引的字符
好问题!Kotlin的String类原生的get()方法(或者等价的下标语法str[index])确实只支持单个索引参数,没法直接传入多个索引值。不过我们有几种简洁的方式实现你想要的效果,下面一一说明:
方法一:用map+joinToString快速实现
这是最直接的写法,不需要额外定义函数,利用标准库的API就能完成:
val str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // 定义需要获取的字符索引列表 val targetIndices = listOf(8, 11, 14, 21, 4, 24, 14, 20) // 遍历索引转成对应字符,再拼接成字符串 println(targetIndices.map { str[it] }.joinToString("")) // 输出:ILOVEYOU
这里的str[it]和str.get(it)是完全等价的,Kotlin允许用下标语法来替代get()方法的调用,写法更简洁。
方法二:自定义扩展函数,贴近你最初的调用设想
如果你希望调用方式完全像你写的str.get(8,11,...)那样,可以给String类扩展一个支持可变参数的get方法:
// 给String类扩展一个接受多个索引参数的get方法 fun String.get(vararg indices: Int): String { return indices.map { this[it] }.joinToString("") } // 现在可以直接按你想要的方式调用了 val str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" println(str.get(8, 11, 14, 21, 4, 24, 14, 20)) // 输出:ILOVEYOU
这个扩展函数会接收任意数量的索引参数,内部把每个索引对应的字符收集起来,最后拼接成完整的字符串返回,完美匹配你最初的需求。
补充说明
为什么原生的get()方法不能直接传多个参数?因为Kotlin中String类的get方法是为了支持下标运算符重载而设计的,它的签名是operator fun get(index: Int): Char,只能接受单个Int类型的索引参数,所以直接传入多个参数会触发编译错误。
内容的提问来源于stack exchange,提问作者Iurii Manakov
相关产品推荐
相关产品推荐

