我想将字符串从“abcde”交换为“bcdea”。所以我在 Kotlin 中编写了如下代码
var prevResult = "abcde"
var tmp = prevResult[0]
for (i in 0..prevResult.length - 2) {
prevResult[i] = prevResult[i+1] // Error on preveResult[i]
}
prevResult[prevResult.length-1] = tmp // Error on preveResult[prevResult.lengt-1]
如上述注释行所述,它会出错。我做错了什么?我怎样才能解决这个问题并得到我想要的?
最佳答案
Strings in Kotlin就像在 Java 中是不可变的,所以没有 string.set(index, value)
(这就是 string[index] = value
等价的)。
要从片段构建字符串,您可以使用 StringBuilder
,构造 CharSequence
并使用 joinToString
,对普通数组(char[]
) 或执行 result = result + nextCharacter
(每次创建一个新字符串——这是最昂贵的方式)。
您可以通过以下方式使用 StringBuilder
:
var prevResult = "abcde"
var tmp = prevResult[0]
var builder = StringBuilder()
for (i in 0..prevResult.length - 2) {
builder.append(prevResult[i+1])
}
builder.append(tmp) // Don't really need tmp, use prevResult[0] instead.
var result = builder.toString()
但是,实现目标的一种更简单的方法(“abcde”中的“bcdea”)只是“移动”一个字符:
var result = prevResult.substring(1) + prevResult[0]
或使用 Sequence
方法:
var result = prevResult.drop(1) + prevResult.take(1)
关于Kotlin:如何在字符串中交换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36259770/