From eae86e035f7ed095ce00a49d18b7e28e6e4f2b75 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 17 Nov 2014 23:48:45 +0300 Subject: [PATCH] Minor in stdlib: move String.trimLeading and String.trimTrailing to common place. --- libraries/stdlib/src/kotlin/text/Strings.kt | 20 ++++++++ .../stdlib/src/kotlin/text/StringsJVM.kt | 20 -------- libraries/stdlib/test/text/StringJVMTest.kt | 48 ------------------- libraries/stdlib/test/text/StringTest.kt | 48 +++++++++++++++++++ 4 files changed, 68 insertions(+), 68 deletions(-) diff --git a/libraries/stdlib/src/kotlin/text/Strings.kt b/libraries/stdlib/src/kotlin/text/Strings.kt index 99e58eac6a7..60c69b59e00 100644 --- a/libraries/stdlib/src/kotlin/text/Strings.kt +++ b/libraries/stdlib/src/kotlin/text/Strings.kt @@ -24,6 +24,26 @@ public fun String.trimTrailing(postfix: String): String { return answer } +/** Returns a new String containing the everything but the leading whitespace characters */ +public fun String.trimLeading(): String { + var count = 0 + + while ((count < this.length) && (this[count] <= ' ')) { + count++ + } + return if (count > 0) substring(count) else this +} + +/** Returns a new String containing the everything but the trailing whitespace characters */ +public fun String.trimTrailing(): String { + var count = this.length + + while (count > 0 && this[count - 1] <= ' ') { + count-- + } + return if (count < this.length) substring(0, count) else this +} + /** Returns true if the string is not null and not empty */ public fun String?.isNotEmpty(): Boolean = this != null && this.length() > 0 diff --git a/libraries/stdlib/src/kotlin/text/StringsJVM.kt b/libraries/stdlib/src/kotlin/text/StringsJVM.kt index 26888bfcf69..3ccbdd2e1e4 100644 --- a/libraries/stdlib/src/kotlin/text/StringsJVM.kt +++ b/libraries/stdlib/src/kotlin/text/StringsJVM.kt @@ -274,26 +274,6 @@ public inline fun String.takeWhileTo(result: T, predicate: (Cha deprecated("Use toList() instead.") public fun String.toCollection(): Collection = toCollection(ArrayList(this.length())) -/** Returns a new String containing the everything but the leading whitespace characters */ -public fun String.trimLeading(): String { - var count = 0 - - while ((count < this.length) && (this[count] <= ' ')) { - count++ - } - return if (count > 0) substring(count) else this -} - -/** Returns a new String containing the everything but the trailing whitespace characters */ -public fun String.trimTrailing(): String { - var count = this.length - - while (count > 0 && this[count - 1] <= ' ') { - count-- - } - return if (count < this.length) substring(0, count) else this -} - /** * Replaces every *regexp* occurence in the text with the value retruned by the given function *body* that can handle * particular occurance using [[MatchResult]] provided. diff --git a/libraries/stdlib/test/text/StringJVMTest.kt b/libraries/stdlib/test/text/StringJVMTest.kt index 1104f69ce15..dd2ffd68731 100644 --- a/libraries/stdlib/test/text/StringJVMTest.kt +++ b/libraries/stdlib/test/text/StringJVMTest.kt @@ -281,54 +281,6 @@ class StringJVMTest { assertEquals("1 234 567,890", "%,.3f".format(Locale("fr"), 1234567.890)) } - test fun trimLeading() { - assertEquals("", "".trimLeading()) - assertEquals("a", "a".trimLeading()) - assertEquals("a", " a".trimLeading()) - assertEquals("a", " a".trimLeading()) - assertEquals("a ", " a ".trimLeading()) - assertEquals("a b", " a b".trimLeading()) - assertEquals("a b ", " a b ".trimLeading()) - - assertEquals("a", "\ta".trimLeading()) - assertEquals("a", "\t\ta".trimLeading()) - assertEquals("a", "\ra".trimLeading()) - assertEquals("a", "\na".trimLeading()) - } - - test fun trimTrailing() { - assertEquals("", "".trimTrailing()) - assertEquals("a", "a".trimTrailing()) - assertEquals("a", "a ".trimTrailing()) - assertEquals("a", "a ".trimTrailing()) - assertEquals(" a", " a ".trimTrailing()) - assertEquals("a b", "a b ".trimTrailing()) - assertEquals(" a b", " a b ".trimTrailing()) - - assertEquals("a", "a\t".trimTrailing()) - assertEquals("a", "a\t\t".trimTrailing()) - assertEquals("a", "a\r".trimTrailing()) - assertEquals("a", "a\n".trimTrailing()) - } - - test fun trimTrailingAndLeading() { - val examples = array( - "a", - " a ", - " a ", - " a b ", - "\ta\tb\t", - "\t\ta\t\t", - "\ra\r", - "\na\n" - ) - - for (example in examples) { - assertEquals(example.trim(), example.trimTrailing().trimLeading()) - assertEquals(example.trim(), example.trimLeading().trimTrailing()) - } - } - test fun toByteArrayEncodings() { val s = "hello" val defaultCharset = java.nio.charset.Charset.defaultCharset()!! diff --git a/libraries/stdlib/test/text/StringTest.kt b/libraries/stdlib/test/text/StringTest.kt index 111b843f326..4b3982f3420 100644 --- a/libraries/stdlib/test/text/StringTest.kt +++ b/libraries/stdlib/test/text/StringTest.kt @@ -134,4 +134,52 @@ class StringTest { sum += (c.toInt() - '0'.toInt()) assertTrue(sum == 14) } + + test fun trimLeading() { + assertEquals("", "".trimLeading()) + assertEquals("a", "a".trimLeading()) + assertEquals("a", " a".trimLeading()) + assertEquals("a", " a".trimLeading()) + assertEquals("a ", " a ".trimLeading()) + assertEquals("a b", " a b".trimLeading()) + assertEquals("a b ", " a b ".trimLeading()) + + assertEquals("a", "\ta".trimLeading()) + assertEquals("a", "\t\ta".trimLeading()) + assertEquals("a", "\ra".trimLeading()) + assertEquals("a", "\na".trimLeading()) + } + + test fun trimTrailing() { + assertEquals("", "".trimTrailing()) + assertEquals("a", "a".trimTrailing()) + assertEquals("a", "a ".trimTrailing()) + assertEquals("a", "a ".trimTrailing()) + assertEquals(" a", " a ".trimTrailing()) + assertEquals("a b", "a b ".trimTrailing()) + assertEquals(" a b", " a b ".trimTrailing()) + + assertEquals("a", "a\t".trimTrailing()) + assertEquals("a", "a\t\t".trimTrailing()) + assertEquals("a", "a\r".trimTrailing()) + assertEquals("a", "a\n".trimTrailing()) + } + + test fun trimTrailingAndLeading() { + val examples = array( + "a", + " a ", + " a ", + " a b ", + "\ta\tb\t", + "\t\ta\t\t", + "\ra\r", + "\na\n" + ) + + for (example in examples) { + assertEquals(example.trim(), example.trimTrailing().trimLeading()) + assertEquals(example.trim(), example.trimLeading().trimTrailing()) + } + } }