Kotlin:如何在字符串中交换字符

标签 kotlin

我想将字符串从“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/

相关文章:

android - 拍照时 Intent 始终为空

android - Kotlin Compose,在行中对齐项目

kotlin - 如何使用 kotlin 协程创建轮询机制?

kotlin - 使用 Kotlin 协程了解作业的所有状态

java - 如何使用 Kotlin 扩展 Java 类以像 static fun 一样使用?

java - 使用谓词的通用集合过滤

android - GoogleSignIn requestPermissions onActivityResult 0 与 Google Fitness 步数/距离范围

Android Notification - 如何根据模型属性创建系统

android - 如何在 Jetpack Compose 中按基线对齐行元素

unit-testing - 测试 RxJava : AdvanceTime not working in simple deferred flowable