Skip to content
Snippets Groups Projects
Verified Commit 051e4df9 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

feat: implement string joiner

parent 81656c9a
No related merge requests found
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
}
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()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment