How to split a string into words in Go

2 Answers

0 votes
package main

import (
    "fmt"
    "regexp"
)

func SplitString(s string, delims string) []string {
    re := regexp.MustCompile(delims)
    parts := re.Split(s, -1)

    tokens := make([]string, 0)
    for _, p := range parts {
        if len(p) > 0 {
            tokens = append(tokens, p)
        }
    }

    return tokens
}

func main() {
    var s string = "-c, c++.. c#:: -java ,php...python      go"
    var delims string = "[ ,.:\\-!]+"

    var tokens []string = SplitString(s, delims)

    for _, t := range tokens {
        fmt.Println(t)
    }
}



/*
run:

c
c++
c#
java
php
python
go

*/

 



answered Aug 29 by avibootz
0 votes
package main

import (
    "fmt"
    "strings"
)

func splitString(s string, delims string) []string {
    // Build a delimiter set
    delimSet := make(map[rune]bool)
    for _, ch := range delims {
        delimSet[ch] = true
    }

    // Normalize delimiters to spaces
    var b strings.Builder
    for _, ch := range s {
        if delimSet[ch] {
            b.WriteRune(' ')
        } else {
            b.WriteRune(ch)
        }
    }

    // Split and filter empty tokens
    parts := strings.Split(b.String(), " ")
    tokens := make([]string, 0, len(parts))
    for _, p := range parts {
        if p != "" {
            tokens = append(tokens, p)
        }
    }

    return tokens
}

func main() {
    s := "-c, c++.. c#:: -java! ,php...python:      go!"
    delims := " ,.:\\-!"

    tokens := splitString(s, delims)

    for _, t := range tokens {
        fmt.Println(t)
    }
}



/*
run:

c
c++
c#
java
php
python
go

*/

 



answered Aug 29 by avibootz
...