Golang怎么分割字符串

其他教程   发布日期:2025年04月14日   浏览次数:91

本文小编为大家详细介绍“Golang怎么分割字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang怎么分割字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1.按空格分割

  1. ss := strings.Fields(s)

示例:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz "))
  8. }

输出:

Fields are: ["foo" "bar" "baz"]

2.按字符/字符串分割

  1. ss := strings.Split(s, sep)

可以指定一个字符串作为分隔符,可以指定单个字符作为分隔符,因为单个字符也是一个字符串。

示例:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. fmt.Printf("%q
  8. ", strings.Split("a,b,c", ","))
  9. fmt.Printf("%q
  10. ", strings.Split("a man a plan a canal panama", "a "))
  11. fmt.Printf("%q
  12. ", strings.Split(" xyz ", ""))
  13. fmt.Printf("%q
  14. ", strings.Split("", ","))
  15. }

输出:

["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]

注意,如果待分割串为空串,strings.Split 将返回包含一个空串的切片。

如果希望返回 nil 切片,可以做一下封装。

  1. func Split(s, sep string) []string {
  2. if s == "" {
  3. return nil
  4. }
  5. return strings.Split(s, sep)
  6. }

3.按多个字符分割

标准库 strings 包中有一个函数 FieldsFunc 可以指定多个字符为分隔符。

  1. ss := strings.FieldsFunc(s,f func(rune) bool)

示例:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. "unicode"
  6. )
  7. func main() {
  8. f := func(c rune) bool {
  9. return !unicode.IsLetter(c) && !unicode.IsNumber(c)
  10. }
  11. fmt.Printf("Fields are: %q", strings.FieldsFunc(" foo1;bar2,baz3...", f))
  12. }

输出:

Fields are: ["foo1" "bar2" "baz3"]

4.按多个字符串分割

截至 Go 1.20,标准库暂未供支持多个字符串作为分隔符的分割函数。但是,我们可以基于 strings.Split 编写一个函数来实现这个功能。

  1. // SplitSeps splits string into substring slice by multiple string separators.
  2. // If you want to specify multiple string separators by regexp,
  3. // please refer to `func (*Regexp) Split` in standard library regexp package.
  4. func SplitSeps(s string, seps ...string) []string {
  5. if len(seps) == 0 {
  6. return []string{s}
  7. }
  8. result := strings.Split(s, seps[0])
  9. for _, sep := range seps[1:] {
  10. var temp []string
  11. for _, r := range result {
  12. temp = append(temp, strings.Split(r, sep)...)
  13. }
  14. result = temp
  15. }
  16. return result
  17. }

示例:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. fmt.Printf("%q
  8. ", SplitSeps("foo,bar,baz", []string{","}...))
  9. fmt.Printf("%q
  10. ", SplitSeps("foo,bar|baz", []string{",", "|"}...))
  11. fmt.Printf("%q
  12. ", SplitSeps("foo,bar|baz qux", []string{",", "|", " "}...))
  13. fmt.Printf("%q
  14. ", SplitSeps("foo,bar|bazSEPqux", []string{",", "|", "SEP"}...))
  15. fmt.Printf("%q
  16. ", SplitSeps("foo,bar|baz", []string{}...))
  17. fmt.Printf("%q
  18. ", SplitSeps(" xyz", []string{""}...))
  19. }

输出:

["foo" "bar" "baz"]
["foo" "bar" "baz"]
["foo" "bar" "baz" "qux"]
["foo" "bar" "baz" "qux"]
["foo,bar|baz"]
[" " "x" "y" "z"]

5.其他分割函数

除了文中提及的标准库函数,你可能还会用到下面这几个函数来控制字符串的分割方式。

strings.SplitN

  1. func strings.SplitN(s, sep string, n int) []string

该函数与 Split 函数类似,但是可以指定分割后的最大子字符串个数 n,如果 n 为正数,则最多分割成 n 个子字符串;如果 n 为负数,则不限制子字符串个数。例如:

  1. str := "hello,world,how,are,you"
  2. words := strings.SplitN(str, ",", 2)
  3. fmt.Println(words) // ["hello", "world,how,are,you"]

strings.SplitAfter

  1. func SplitAfter(s, sep string) []string

该函数将字符串 s 按照分割符 sep 分割成多个子字符串,并返回一个字符串切片。不同于 Split 函数的是,SplitAfter 函数会在分割符之后分割,例如:

  1. str := "hello,world,how,are,you"
  2. words := strings.SplitAfter(str, ",")
  3. fmt.Println(words) // ["hello,", "world,", "how,", "are,", "you"]

strings.SplitAfterN

  1. func SplitAfterN(s, sep string, n int) []string

该函数与 SplitAfter 函数类似,但是可以指定分割后的最大子字符串个数 n。如果 n 为负数,则不限制子字符串个数。例如:

  1. str := "hello,world,how,are,you"
  2. words := strings.SplitAfterN(str, ",", 2)
  3. fmt.Println(words) // ["hello,", "world,how,are,you"]

6.go-huge-util

借助 Golang 标准库提供的相关函数,分割字符串还是比较方便的。

文中提及的两个函数,已放置 Github 开源工具库 go-huge-util,大家可使用 go mod 方式 import 然后使用。

  1. import "github.com/dablelv/go-huge-util/str"
  2. // Split 如果待分割串为空串,返回 nil 切片而非包含一个空串的切片。
  3. str.Split(s, sep string) []string
  4. // SplitSeps 通过多个字符串分隔符将字符串分割为字符串切片。
  5. str.SplitSeps(s string, seps []string) []string

go-huge-util 除了类型转换,还有很多其他实用函数,如加解密、zip 解压缩等,欢迎大家使用、Star、Issue 和 Pull Request。

以上就是Golang怎么分割字符串的详细内容,更多关于Golang怎么分割字符串的资料请关注九品源码其它相关文章!