diff --git a/libraries/stdlib/common/src/kotlin/TextH.kt b/libraries/stdlib/common/src/kotlin/TextH.kt index a4e74e5660c..df66cf3d48b 100644 --- a/libraries/stdlib/common/src/kotlin/TextH.kt +++ b/libraries/stdlib/common/src/kotlin/TextH.kt @@ -129,6 +129,15 @@ public expect fun String.decapitalize(): String public expect fun CharSequence.repeat(n: Int): String +/** + * Clears the content of this string builder making it empty. + * + * @sample samples.text.Strings.clearStringBuilder + */ +@SinceKotlin("1.3") +public expect fun StringBuilder.clear(): StringBuilder + + /** * Returns a new string with all occurrences of [oldChar] replaced with [newChar]. */ diff --git a/libraries/stdlib/js/src/kotlin/text.kt b/libraries/stdlib/js/src/kotlin/text.kt index fec1bdfc638..f427191e911 100644 --- a/libraries/stdlib/js/src/kotlin/text.kt +++ b/libraries/stdlib/js/src/kotlin/text.kt @@ -53,5 +53,27 @@ public actual class StringBuilder(content: String = "") : Appendable, CharSequen return this } + /** + * Clears the content of this string builder making it empty. + * + * @sample samples.text.Strings.clearStringBuilder + */ + @SinceKotlin("1.3") + public fun clear(): StringBuilder { + string = "" + return this + } + override fun toString(): String = string } + + + +/** + * Clears the content of this string builder making it empty. + * + * @sample samples.text.Strings.clearStringBuilder + */ +@SinceKotlin("1.3") +@Suppress("EXTENSION_SHADOWED_BY_MEMBER") +public actual fun StringBuilder.clear(): StringBuilder = this.clear() \ No newline at end of file diff --git a/libraries/stdlib/jvm/src/kotlin/text/StringBuilderJVM.kt b/libraries/stdlib/jvm/src/kotlin/text/StringBuilderJVM.kt index 75df67910b4..c80a125b1f4 100644 --- a/libraries/stdlib/jvm/src/kotlin/text/StringBuilderJVM.kt +++ b/libraries/stdlib/jvm/src/kotlin/text/StringBuilderJVM.kt @@ -14,6 +14,13 @@ package kotlin.text @kotlin.internal.InlineOnly public inline operator fun StringBuilder.set(index: Int, value: Char): Unit = this.setCharAt(index, value) +/** + * Clears the content of this string builder making it empty. + * + * @sample samples.text.Strings.clearStringBuilder + */ +@SinceKotlin("1.3") +public actual fun StringBuilder.clear(): StringBuilder = apply { setLength(0) } private object SystemProperties { /** Line separator for current system. */ diff --git a/libraries/stdlib/samples/test/samples/text/strings.kt b/libraries/stdlib/samples/test/samples/text/strings.kt index cdfee832446..961619d6579 100644 --- a/libraries/stdlib/samples/test/samples/text/strings.kt +++ b/libraries/stdlib/samples/test/samples/text/strings.kt @@ -127,4 +127,14 @@ class Strings { val noPadding = "abcde".padEnd(3) assertPrints("'$noPadding'", "'abcde'") } + @Sample + fun clearStringBuilder() { + val builder = StringBuilder() + builder.append("content").append(1) + assertPrints(builder, "content1") + + builder.clear() + assertPrints(builder, "") + } + } diff --git a/libraries/stdlib/test/text/StringBuilderTest.kt b/libraries/stdlib/test/text/StringBuilderTest.kt index c2b24b09200..67ee8016336 100644 --- a/libraries/stdlib/test/text/StringBuilderTest.kt +++ b/libraries/stdlib/test/text/StringBuilderTest.kt @@ -66,4 +66,13 @@ class StringBuilderTest { assertEquals("content", sb.toString()) } } + + @Test fun clear() { + val sb = StringBuilder() + sb.append("test") + val s = sb.toString() + sb.clear() + assertTrue(sb.isEmpty()) + assertEquals("test", s) + } } diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt index 17b4d9997ae..3c905b8f792 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt @@ -4731,6 +4731,7 @@ public final class kotlin/text/StringsKt { public static final fun chunked (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun chunkedSequence (Ljava/lang/CharSequence;I)Lkotlin/sequences/Sequence; public static final fun chunkedSequence (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; + public static final fun clear (Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder; public static final fun commonPrefixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String; public static synthetic fun commonPrefixWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Ljava/lang/String; public static final fun commonSuffixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String;