From 6fda0816f3cde8bce8b2a3bc42dbe4bc8e433782 Mon Sep 17 00:00:00 2001 From: Laszlo Hornyak Date: Wed, 27 Apr 2016 07:34:38 +0200 Subject: [PATCH] buildString with initial capacity for the StringBuilder instance this method helps save computation time when the developer knows or have a good educated guess about the size of the generated string and have to use control structures while filling the string builder Signed-off-by: Laszlo Hornyak Signed-off-by: Laszlo Hornyak --- libraries/stdlib/src/kotlin/text/StringBuilder.kt | 6 ++++++ libraries/stdlib/test/text/StringBuilderJVMTest.kt | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/libraries/stdlib/src/kotlin/text/StringBuilder.kt b/libraries/stdlib/src/kotlin/text/StringBuilder.kt index 0d5d16cc25d..b2996b3ba84 100644 --- a/libraries/stdlib/src/kotlin/text/StringBuilder.kt +++ b/libraries/stdlib/src/kotlin/text/StringBuilder.kt @@ -9,6 +9,12 @@ package kotlin.text @kotlin.internal.InlineOnly public inline fun buildString(builderAction: StringBuilder.() -> Unit): String = StringBuilder().apply(builderAction).toString() +/** + * Builds new string by populating newly created [StringBuilder] initialized with the given capacity using provided [builderAction] and then converting it to [String]. + */ +@kotlin.internal.InlineOnly +inline fun buildString(capacity : Int, builderAction: StringBuilder.() -> Unit): String = StringBuilder(capacity).apply(builderAction).toString() + /** * Appends all arguments to the given [Appendable]. */ diff --git a/libraries/stdlib/test/text/StringBuilderJVMTest.kt b/libraries/stdlib/test/text/StringBuilderJVMTest.kt index 4bd41acab5a..3e5ae4c2fc5 100644 --- a/libraries/stdlib/test/text/StringBuilderJVMTest.kt +++ b/libraries/stdlib/test/text/StringBuilderJVMTest.kt @@ -5,6 +5,13 @@ import kotlin.test.* import org.junit.Test as test class StringBuilderJVMTest() { + + @test fun stringBuildWithInitialCapacity() { + val s = buildString(123) { + assertEquals(123, capacity()) + } + } + @test fun getAndSetChar() { val sb = StringBuilder("abc") sb[1] = 'z'