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

1 Answer

0 votes
import Foundation

func splitAndKeep(_ text: String, delims: Set<Character>) -> [String] {
    guard !text.isEmpty else { return [] }

    let chars = Array(text)
    var result: [String] = []
    var start = 0

    for i in 1..<chars.count {
        let prev = chars[i - 1]
        let curr = chars[i]

        let prevIsDelim = delims.contains(prev)
        let currIsDelim = delims.contains(curr)

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

        if shouldSplit {
            result.append(String(chars[start..<i]))
            start = i
        }
    }

    // Add final segment
    result.append(String(chars[start...]))

    return result
}

let s = "aa==bbb---cccc++++ddddd"
let delimiters: Set<Character> = ["=", "-", "+"]

print(splitAndKeep(s, delims: delimiters))



/*
run:

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

*/

 



answered Mar 10 by avibootz

Related questions

...