微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Kotlin中特定位置x的字符串中插入一个字符

如何解决在Kotlin中特定位置x的字符串中插入一个字符

Kotlin中的字符串是不可变的,不能像

ans[index] = value

我想知道它们是使它正常工作的简单方法

解决方法

如果StringBuilder是您的决定,则也可以使用.insert()并创建类似以下内容的文件:

fun String.addCharAtIndex(char: Char,index: Int) =
    StringBuilder(this).apply { insert(index,char) }.toString()

调用它会像这样:

val s = "hello orld".addCharAtIndex('w',6)
println(s) // this will print 'hello world'

问题是,我们没有添加到现有字符串中,而是创建了一个新字符串,并将旧字符串留给了GC。这意味着如果原始字符串有1MB,我们现在将用完2MB(直到GC起作用为止)。如果字符串不是很大,并且我们有足够的内存,则此代码应该可以。

我不确定在不创建新字符串的情况下如何将添加到字符串中,因为String在Kotlin中是不可变的。

编辑:

显然,如@ al3c所建议的那样,已经有一个名为replaceRange()的函数可用于任何CharSequence。它可能比我上面显示的自定义样式更好(如果需要,它还可以添加CharSequence,不仅可以添加Char,而且还可以工作。)

您将像这样使用它:

val string = "hello orld".replaceRange(6,6,"w")
println(string) //this will print 'hello world'

但要注意,这还将创建一个新的String。从文档中查看:

返回具有此char序列内容的char序列,其中在给定范围内的部分被替换char序列替换。

,

如果您想进行频繁的更改,则可以先将其转换为CharArray,进行更改,然后再转换为joinToString

val index = 3
val str = "one two"
val ans = str.toCharArray().also { it[index] = '_' }.joinToString("")

print(ans)

尽管只是一次更改,但最好像其他人建议的那样使用StringBuilder

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。