diff --git a/app/src/main/kotlin/de/justjanne/quasseldroid/util/backport/StringJoiner.kt b/app/src/main/kotlin/de/justjanne/quasseldroid/util/backport/StringJoiner.kt new file mode 100644 index 0000000000000000000000000000000000000000..20d737f3080a5da648b61de3f77c276f1c8e43cc --- /dev/null +++ b/app/src/main/kotlin/de/justjanne/quasseldroid/util/backport/StringJoiner.kt @@ -0,0 +1,39 @@ +package de.justjanne.quasseldroid.util.backport + +import java.io.Serializable + +class StringJoiner( + private val delimiter: String, + private val prefix: String = "", + private val suffix: String = "" +) : Serializable, Appendable { + private val builder = StringBuilder() + + override fun append(data: CharSequence?, start: Int, end: Int): StringJoiner = + this.apply { prepareBuilder().append(data, start, end) } + + override fun append(data: CharSequence?): StringJoiner = + this.apply { prepareBuilder().append(data) } + + override fun append(data: Char): StringJoiner = + this.apply { prepareBuilder().append(data) } + + private fun prepareBuilder(): StringBuilder = builder.apply { + append(if (isEmpty()) prefix else delimiter) + } + + override fun toString(): String = + if (builder.isEmpty()) { + prefix + suffix + } else { + val length = builder.length + builder.append(suffix) + val result = builder.toString() + builder.setLength(length) + result + } + + fun length(): Int = + if (builder.isEmpty()) prefix.length + suffix.length + else builder.length + suffix.length +} diff --git a/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/StringJoinerExtensions.kt b/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/StringJoinerExtensions.kt new file mode 100644 index 0000000000000000000000000000000000000000..c5d8ac51b1ce8fcc2bcc8c514dd5681766879b3b --- /dev/null +++ b/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/StringJoinerExtensions.kt @@ -0,0 +1,12 @@ +package de.justjanne.quasseldroid.util.extensions + +import de.justjanne.quasseldroid.util.backport.StringJoiner + +inline fun joinString( + delimiter: String = "", + prefix: String = "", + suffix: String = "", + builderAction: StringJoiner.() -> Unit +): String { + return StringJoiner(delimiter, prefix, suffix).apply(builderAction).toString() +}