`strings.split`可以忽略空标记吗?

时间:2017-10-17 19:48:14

标签: go

请您演示一种使用strings.split的有效方法,以便返回的切片中不包含空标记?

具体来说,以下代码返回["a" "" "b" "c"],我想让它返回["a" "b" "c"]

fmt.Printf("%q\n", strings.Split("a,,b,c", ","))

https://play.golang.org/p/keaSjjSxgn

3 个答案:

答案 0 :(得分:15)

简短回答:strings.Split不能这样做。

但是,在Go中分割字符串的功能还有很多。值得注意的是,您可以使用strings.FieldsFunc执行所需操作。这里的例子是:

splitFn := func(c rune) bool {
        return c == ','
}
fmt.Printf("Fields are: %q\n", strings.FieldsFunc("a,,b,c", splitFn))

在操场上:https://play.golang.org/p/Lp1LsoIxAK

答案 1 :(得分:1)

您可以从数组中过滤掉空元素,这样就可以做到第二步。

package main

import (
    "fmt"
    "strings"
)

func delete_empty (s []string) []string {
    var r []string
    for _, str := range s {
        if str != "" {
            r = append(r, str)
        }
    }
    return r
}

func main() {
    var arr = strings.Split("a,,b,c", ",");
    fmt.Printf("%q\n", delete_empty(arr));
}

更新了Golang Playground

答案 2 :(得分:1)

如果可以使用regexp,则可以拆分1+分隔符:

package main
import (
  "fmt"
  "regexp"
)

func main() {
  fmt.Printf("%q\n", regexp.MustCompile(",+").Split("a,,b,c", -1))
}

Playground link