字符串循环右移替换需求与代码实现偏差的技术问询
问题分析与代码修正
需求明确
要实现的是字符串字符循环右移一位:每个字符替换为原字符串中它右侧相邻的字符,最后一个字符则替换为原字符串的第一个字符,重新拼接成新字符串。
现有代码的问题
当前代码完全没执行位置右移操作,只是把每个字符的ASCII值直接加1——字母按字母表递增一位,数字也同步加1:
fun main() { val message = "abcd1234" val messageSecond = message.map { char -> char + 1 }.joinToString("") }
以输入abcd1234为例,这段代码会输出bcde2345,和需求预期的结果完全不符。
修正思路
- 基于字符在字符串中的索引处理:对原字符串索引为
i的位置,新字符串对应位置取原字符串索引(i + 1) % message.length的字符 - 最后一个字符的索引加1后取模会得到0,刚好对应原字符串的第一个字符,实现循环效果
修正后的代码
fun main() { val message = "abcd1234" val messageSecond = message.indices.map { i -> message[(i + 1) % message.length] }.joinToString("") println(messageSecond) // 输出结果:d1234abc }
内容的提问来源于stack exchange,提问作者Superavia sales
相关产品推荐
相关产品推荐

