From 051e4df9e4061189e5f4d73b12deb88149a14f73 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Thu, 3 Mar 2022 19:14:44 +0100 Subject: [PATCH] feat: implement string joiner --- .../util/backport/StringJoiner.kt | 39 +++++++++++++++++++ .../util/extensions/StringJoinerExtensions.kt | 12 ++++++ 2 files changed, 51 insertions(+) create mode 100644 app/src/main/kotlin/de/justjanne/quasseldroid/util/backport/StringJoiner.kt create mode 100644 app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/StringJoinerExtensions.kt 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 000000000..20d737f30 --- /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 000000000..c5d8ac51b --- /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() +} -- GitLab