From 7ccded5f6daa9280842536a9590742f22ae1df32 Mon Sep 17 00:00:00 2001 From: Tommy Hallgren Date: Thu, 15 Nov 2012 10:35:01 +0100 Subject: [PATCH] KT-2503 Added String.repeat method #KT-2503 fixed --- libraries/stdlib/src/kotlin/Strings.kt | 15 +++++++++++++++ libraries/stdlib/test/StringTest.kt | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/libraries/stdlib/src/kotlin/Strings.kt b/libraries/stdlib/src/kotlin/Strings.kt index bf8625f272f..ae159b579e5 100644 --- a/libraries/stdlib/src/kotlin/Strings.kt +++ b/libraries/stdlib/src/kotlin/Strings.kt @@ -63,3 +63,18 @@ public inline fun String.count(predicate: (Char) -> Boolean): Int { } return answer } + +/** + * Repeats a given string n times. + * When n < 0, IllegalArgumentException is thrown. + * @includeFunctionBody ../../test/StringTest.kt repeat + */ +public inline fun String.repeat(n: Int): String { + require(n >= 0, { "Cannot repeat string $n times" }) + + var sb = StringBuilder() + for (i in 1..n) { + sb.append(this) + } + return sb.toString() +} diff --git a/libraries/stdlib/test/StringTest.kt b/libraries/stdlib/test/StringTest.kt index 30e8a1ededc..072cc9d489a 100644 --- a/libraries/stdlib/test/StringTest.kt +++ b/libraries/stdlib/test/StringTest.kt @@ -49,4 +49,12 @@ class StringTest { assertEquals("uRL", "URL".decapitalize()) } + test fun repeat() { + fails{ "foo".repeat(-1) } + assertEquals("", "foo".repeat(0)) + assertEquals("foo", "foo".repeat(1)) + assertEquals("foofoo", "foo".repeat(2)) + assertEquals("foofoofoo", "foo".repeat(3)) + } + }