在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="") 

该解决方案的优点是可以定义前缀,后缀和分隔符。