Golang字符串分割方法

在Golang中,如何高效地分割字符串?常用的Split、SplitN和Fields等方法有什么区别?能否举例说明在不同场景下的最佳选择?比如处理CSV数据或按多空格分割文本时,哪种方法性能更好?

2 回复

Go语言中,字符串分割常用strings.Split函数。例如:

s := "a,b,c"
parts := strings.Split(s, ",")
// parts: ["a", "b", "c"]

还有strings.SplitN可控制分割次数,Fields按空格分割。注意导入strings包。

更多关于Golang字符串分割方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,字符串分割主要使用标准库strings包提供的方法。以下是常用的几种方法:

1. strings.Split

按指定分隔符将字符串分割成切片,分隔符不会出现在结果中。

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "a,b,c"
	parts := strings.Split(str, ",")
	fmt.Println(parts) // 输出: [a b c]
}

2. strings.SplitN

限制分割次数,n 控制返回的子字符串数量:

  • n > 0:最多分割成 n 个子串
  • n == 0:返回空切片
  • n < 0:全部分割(等同于 Split
str := "a,b,c,d"
parts := strings.SplitN(str, ",", 3)
fmt.Println(parts) // 输出: [a b c,d]

3. strings.Fields

按空白字符(空格、制表符、换行符等)分割字符串。

str := "a b\tc\nd"
parts := strings.Fields(str)
fmt.Println(parts) // 输出: [a b c d]

4. strings.FieldsFunc

自定义分割函数,根据函数返回值决定分割点。

str := "a,b;c|d"
parts := strings.FieldsFunc(str, func(r rune) bool {
    return r == ',' || r == ';' || r == '|'
})
fmt.Println(parts) // 输出: [a b c d]

5. 正则表达式分割

使用 regexp 包处理复杂分割规则:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	str := "a,b;c|d"
	re := regexp.MustCompile(`[,;|]`)
	parts := re.Split(str, -1)
	fmt.Println(parts) // 输出: [a b c d]
}

注意事项:

  • 所有方法返回 []string 类型切片
  • 空分隔符会按字符分割:strings.Split("abc", "") 返回 [a b c]
  • 连续分隔符会产生空字符串:strings.Split("a,,b", ",") 返回 [a "" b]

根据具体需求选择合适的方法,简单分割推荐 Split,复杂规则可用正则表达式。

回到顶部