UmA*_*orn 12 string stringbuilder kotlin
Kotlin 中的字符串是不可变的,不能像
ans[index] = value
Run Code Online (Sandbox Code Playgroud)
我想知道它们是使其发挥作用的简单方法
Ale*_*exT 21
如果您决定使用 StringBuilder,则还可以使用.insert(), 并创建如下内容:
fun String.addCharAtIndex(char: Char, index: Int) =
StringBuilder(this).apply { insert(index, char) }.toString()
Run Code Online (Sandbox Code Playgroud)
调用它会像这样工作:
val s = "hello orld".addCharAtIndex('w', 6)
println(s) // this will print 'hello world'
Run Code Online (Sandbox Code Playgroud)
问题是,我们没有添加到现有字符串,而是创建了一个新字符串,并将旧字符串留给 GC。这意味着如果原始字符串有 1MB,我们现在将使用 2MB(直到 GC 完成它的工作)。如果字符串不是很大并且我们有足够的内存,那么这段代码应该没问题。
我不确定如何在不创建新字符串的情况下实际添加到字符串中,因为字符串在 Kotlin 中是不可变的。
编辑:
显然,正如 @al3c 所建议的,已经有一个函数可以执行此操作,replaceRange()该函数适用于任何CharSequence. 它可能会比我上面展示的自定义更好(如果需要的话,它也可以添加 a ,CharSequence而不仅仅是 a Char)。
你可以像这样使用它:
val string = "hello orld".replaceRange(6,6,"w")
println(string) //this will print 'hello world'
Run Code Online (Sandbox Code Playgroud)
但请注意,这也会创建一个新的String. 从文档中看到:
返回一个字符序列,其中包含此字符序列的内容,其中给定范围内的部分被替换字符序列替换。
| 归档时间: |
|
| 查看次数: |
12734 次 |
| 最近记录: |