在Kotlin重复字符串n次
我想创建一个包含n
个符号的string
n
次。 我只看到这种方式:
val s = "" val n = 100 for (j in 0 until n) { s += "*" }
但它看起来很丑,它有一个O(n ^ 2)的时间复杂性。 Kotlin有没有办法在没有更好时间复杂性的情况下做到这一点?
内置的CharSequence.repeat
扩展以一种有效的方式实现了这一点,请参阅源代码。
val str: String = "*".repeat(100)
当然,这仍然需要O(n)个步骤来创建字符串。 但是,使用这个内置的stdlib函数有其优点:如果有更高效的解决方案,它是跨平台的,易于阅读,并且可以随着时间的推移而提高性能。 它里面的循环可能会被编译器或运行时优化。
StringBuilder
将改善这里的内存占用 :
val sb = StringBuilder() val n = 100 for (j in 0 until n) { sb.append("*") }
CharSequence.repeat的另一种方法是使用init函数的CharArray:
CharArray(N, {i -> '*'}).joinToString(separator="")
该解决方案的优点是可以定义前缀,后缀和分隔符。