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

1 Answer

0 votes
package main

import (
    "fmt"
)

func splitAndKeep(text string, delims map[rune]bool) []string {
    if len(text) == 0 {
        return []string{}
    }

    var result []string
    start := 0

    for i := 1; i < len(text); i++ {
        prev := rune(text[i-1])
        curr := rune(text[i])

        prevIsDelim := delims[prev]
        currIsDelim := delims[curr]

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

        if shouldSplit {
            result = append(result, text[start:i])
            start = i
        }
    }

    // Add final segment
    result = append(result, text[start:])

    return result
}

func main() {
    s := "aa==bbb---cccc++++ddddd"
    delims := map[rune]bool{
        '=': true,
        '-': true,
        '+': true,
    }

    parts := splitAndKeep(s, delims)

    for _, p := range parts {
        fmt.Printf("[%s] ", p)
    }
}



/*
run:

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

*/

 



answered Mar 10 by avibootz

Related questions

...