@file:kotlin.jvm.JvmMultifileClass @file:kotlin.jvm.JvmName("StringsKt") package kotlin.text public inline fun CharSequence.trim(predicate: (Char) -> Boolean): CharSequence { var startIndex = 0 var endIndex = length - 1 var startFound = false while (startIndex <= endIndex) { val index = if (!startFound) startIndex else endIndex val match = predicate(this[index]) if (!startFound) { if (!match) startFound = true else startIndex += 1 } else { if (!match) break else endIndex -= 1 } } return subSequence(startIndex, endIndex + 1) } public fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace) public inline fun String.trim(): String = (this as CharSequence).trim().toString() public inline fun CharSequence.isEmpty(): Boolean = length == 0 public inline fun CharSequence.isNotEmpty(): Boolean = length > 0 public operator fun CharSequence.iterator(): Iterator = object : Iterator { private var index = 0 public override fun next(): Char = get(index++) public override fun hasNext(): Boolean = index < length } public fun CharSequence.first(): Char { if (isEmpty()) throw NoSuchElementException("Char sequence is empty.") return this[0] } public val CharSequence.indices: IntRange get() = 0..length - 1 public val CharSequence.lastIndex: Int get() = this.length - 1 public inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String = subSequence(startIndex, endIndex).toString() public fun CharSequence.substring(range: IntRange): String = subSequence(range.start, range.endInclusive + 1).toString() public inline fun CharSequence.elementAtOrElse(index: Int, defaultValue: (Int) -> Char): Char { return if (index >= 0 && index <= lastIndex) get(index) else defaultValue(index) } public fun CharSequence.toList(): List { return when (length) { 0 -> emptyList() 1 -> listOf(this[0]) else -> this.toMutableList() } } public fun CharSequence.toMutableList(): MutableList { return toCollection(ArrayList(length)) } public fun > CharSequence.toCollection(destination: C): C { for (item in this) { destination.add(item) } return destination }