是StringBuffer是像Java中那样处理多个字符串串联的Kotlin方法吗?

毛里西奥·罗德里格斯(Mauricio Rodriguez)

Kotlin处理多重字符串串联的方式是什么?

--edit--放置导致我怀疑的那段代码

fun getNCharsFromRange(n: Int, range: CharRange): String {
    val chars = range.toList()
    val buffer = StringBuffer()
    while (buffer.length < n) {
        val randomInt = Random.Default.nextInt(0, chars.lastIndex)
        val newchar = chars[randomInt]
        val lastChar = buffer.lastOrNull() ?: ""
        if (newchar != lastChar) {
            buffer.append(newchar)
        }
    }
    return buffer.toString()
}
吉兹

一个StringBuilder的是建立在科特林一个字符串,如Java的标准方式。

(当然,除非可以一行完成,否则字符串模板通常比Java样式的串联更好。)

但是Kotlin有一个改进:您可以使用它buildString来隐式处理它,这可以使代码更加简洁。例如,您的代码可以编写为:

fun getNCharsFromRange(n: Int, range: CharRange): String {
    val chars = range.toList()
    return buildString {
        while (length < n) {
            val randomInt = Random.Default.nextInt(0, chars.lastIndex)
            val newChar = chars[randomInt]
            val lastChar = lastOrNull() ?: ""
            if (newChar != lastChar)
                append(newChar)
        }
    }
}

上面没有提到buffer:相反,buildString创建一个StringBuilder,将其作为可用this,然后返回生成的String。(因此lengthlastOrNull()append参考StringBuilder的。)

对于短代码,这可以更加简洁明了。尽管使用更长的代码的好处并不清楚。(您的代码可能在...之间的灰色区域中)


值得指出的是,函数名称具有误导性:它避免了重复的字符,但允许不连续的重复项。如果这是故意的,那么值得在函数名称(和/或其文档注释)中明确说明。或者,如果要避免所有重复,则存在一种更简单和/或更有效的方法:洗改范围(或至少范围的一部分)。

使用现有的库函数,并使其成为CharRange的扩展函数,整个过程可能很简单:

fun CharRange.randomChars(n: Int) = shuffled().take(n).joinToString("")

即使只需要几个字符,也可以使整个列表混乱。因此,只洗洗所需的部分将更加有效。但是没有库函数,因此您必须手动编写。我将其保留为练习!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将多个链接记录中的多个字符串串联成每个记录链单个字符串的有效方法

来自分类Dev

Java中没有分配的字符串串联

来自分类Dev

Java处理多个字符串参数

来自分类Dev

Javascript字符串串联的替代方法?

来自分类Dev

锈中的字符串串联

来自分类Dev

R中的字符串串联

来自分类Dev

Access VBA中的字符串串联

来自分类Dev

如何在Assembly中串联两个字符串时处理错误?

来自分类Dev

字符串串联的变体?

来自分类Dev

宏字符串串联

来自分类Dev

OleDbDataAdapter字符串串联

来自分类Dev

Rust字符串串联

来自分类Dev

Python:字符串串联

来自分类Dev

字符串串联和@

来自分类Dev

字符串串联。C

来自分类Dev

宏字符串串联

来自分类Dev

字符串串联NASM

来自分类Dev

串联N个字符串

来自分类Dev

MySQL可以在BLOB中处理200万个字符长的字符串吗

来自分类Dev

Kotlin-是否有基本函数可以用引用字符串中的多个字符串替换多个字符串?

来自分类Dev

计算Kotlin中多个字符组中所有可能的字符串

来自分类Dev

打印多个字符串与串联并同时打印所有字符串

来自分类Dev

python同时处理多个字符串

来自分类Dev

如何处理列的多个字符串

来自分类Dev

替换StringBuffer中的单个字符

来自分类Dev

用Java字符串中的多个替换项替换多个字符?

来自分类Dev

替换巨大字符串中多个字符串的最快方法

来自分类Dev

替换巨大字符串中多个字符串的最快方法

来自分类Dev

Perl中的数字和字符串串联