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()
+}