How to split a string on multiple multi‑character delimiters (and keep them) in Kotlin

1 Answer

0 votes
fun splitAndKeep(text: String, delims: Set<Char>): List<String> {
    if (text.isEmpty()) return emptyList()

    val result = mutableListOf<String>()
    var start = 0

    for (i in 1 until text.length) {
        val prev = text[i - 1]
        val curr = text[i]

        val prevIsDelim = prev in delims
        val currIsDelim = curr in delims

        val shouldSplit =
            (prevIsDelim != currIsDelim) ||              // text ↔ delim
            (prevIsDelim && currIsDelim && prev != curr) // delim type changed

        if (shouldSplit) {
            result += text.substring(start, i)
            start = i
        }
    }

    // Add final segment
    result += text.substring(start)

    return result
}

fun main() {
    val s = "aa==bbb---cccc++++ddddd"
    val delimiters = setOf('=', '-', '+')

    val parts = splitAndKeep(s, delimiters)
    println(parts)
}




/*
run:

[aa, ==, bbb, ---, cccc, ++++, ddddd]

*/

 



answered Mar 10 by avibootz

Related questions

...