Kotlin如何用符合语言习惯的方式从字符串中获取指定字符的随机位置
Kotlin 简洁实现方案
你可以直接利用Kotlin的集合扩展函数一行实现,无需手动写循环和维护中间列表:
val randPos = data.indices.filter { data[it] == 'T' }.random()
data.indices直接获取字符串所有合法下标的IntRangefilter筛选出对应位置字符为'T'的下标,直接生成目标列表- 最后调用
random()方法获取随机下标,和你原有逻辑完全一致
空安全优化
如果需要处理字符串中不存在'T'的边界场景,可以用randomOrNull()避免抛出异常,还可以配合Elvis运算符给默认值:
// 无匹配时返回null val randPos = data.indices.filter { data[it] == 'T' }.randomOrNull() // 无匹配时返回默认值-1 val randPos = data.indices.filter { data[it] == 'T' }.randomOrNull() ?: -1
可选等价写法
你也可以用mapIndexedNotNull实现,逻辑等价,适合同时需要处理字符和下标的场景:
val randPos = data.mapIndexedNotNull { idx, char -> idx.takeIf { char == 'T' } }.random()
内容的提问来源于stack exchange,提问作者Sumit Shukla
相关产品推荐
相关产品推荐

