您的位置:

详解strings.split函数

一、常见用法

strings.split函数是Go语言中常用的字符串分割函数。它可以根据指定的分隔符将一个字符串分割成多个子串,并返回以分隔符分割后得到的子串切片。常见用法如下:

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello,world"
	arr := strings.Split(str, ",")
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

上述代码中,我们将字符串"hello,world"按照逗号为分隔符进行分割,并遍历打印得到的子串切片,输出结果为:

hello
world

可以看到,strings.split函数简单易用,是处理字符串分割的利器。

二、多个分隔符

除了使用单个分隔符对字符串进行分割以外,strings.split函数还可以同时指定多个分隔符,如下所示:

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello|world,you|and|me"
	arr := strings.Split(str, "|,")
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

上述代码中,我们同时指定了"|"和","两个字符作为分隔符,将字符串"hello|world,you|and|me"分割成多个子串,并输出结果为:

hello
world
you
and
me

这种方式可以满足一些特殊的分割需求,例如以不同的符号作为分隔符进行分割。

三、分割N次

有时候我们希望只对字符串进行N次分割,strings.split函数也可以实现这一需求。代码如下:

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello,world,how,are,you"
	arr := strings.SplitN(str, ",", 3)
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

上述代码中,我们指定了使用逗号作为分隔符,仅对字符串进行了3次分割,输出结果为:

hello
world
how,are,you

可以看到,只有前两个子串被分割出来了。这样的处理方式可以在一些场景中提高效率。

四、分割空字符串

strings.split函数默认情况下会忽略空字符串,但是有些时候我们却需要对连续的分隔符进行空字符串分割。这时候,只需传入负数即可。代码如下:

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello||world|||you"
	arr := strings.Split(str, "|")
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

上述代码中,字符串中出现多个连续的"|"符号,strings.split函数默认会忽略这些空字符串。如果我们需要对这些空字符串进行分割,只需传入负数即可,代码如下:

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "hello||world|||you"
	arr := strings.Split(str, "|-1")
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

输出结果为:

hello

world


you

五、多重分割

如果我们需要进行多重分割,可以使用递归的方式来解决。代码如下:

package main

import (
	"fmt"
	"strings"
)

func Split(str string, sep ...string) []string {
	if len(sep) == 0 {
		return []string{str}
	}

	arr := strings.Split(str, sep[0])

	for i := range arr {
		arr[i] = Split(arr[i], sep[1:]...)
	}

	var res []string
	for i := range arr {
		res = append(res, arr[i]...)
	}

	return res
}

func main() {
	str := "hello|world,you|and|me::how-are:you"
	arr := Split(str, "|", ",", "::", "-")
	for i := range arr {
		fmt.Printf("%s\n", arr[i])
	}
}

可以看到,我们定义了一个Split函数,其中使用了递归的方式进行多重分割,通过传入多个分隔符,可以将字符串分割成多个子串,输出结果为:

hello
world
you
and
me
how
are
you

这种方式可以满足一些特殊的分割需求,例如以多个不同的符号作为分隔符进行分割。