如何解决在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 举报,一经查实,本站将立刻删除。