有这样一个使用空格分割字符串的场景,字符串中被分割的子串之间的空格数量不确定,有一个两个或者多个空格,这种场景下,使用最容易想到的 strings.Split 函数就做不到了。本文接下来就介绍几种行之有效的方法。
使用 strings.Fields 函数
strings.Fields 函数接受一个字符串类型的参数,使用空格及多个连续的空格将字符串进行分割,返回一个字符串切片,正好满足了我们的需求。使用示例如下:
package mainimport ("fmt""strings"
)func main() {str := "欢迎来到路多辛的博客 所思所想 很棒"s := strings.Fields(str)fmt.Println(s)
}
运行看下效果:
$ go run main.go
[欢迎来到路多辛的博客 所思所想 很棒]
可以看出 str 中的子串虽然被数量不等的空格隔开,使用strings.Fields 函数处理后得到了一个字符串类型的切片,字符串被完美分割。
使用正则表达式
首先看下示例代码:
package mainimport ("fmt""regexp"
)func main() {str := "欢迎来到路多辛的博客 所思所想 很棒"reg := regexp.MustCompile(`\s+`)result := reg.Split(str, -1)fmt.Println(result)
}
运行看下效果:
$ go run main.go
[欢迎来到路多辛的博客 所思所想 很棒]
得到了和上个示例一样的数据,首先使用 regexp.MustCompile 函数创建一个正则表达式,用于匹配一个或多个空格(\s+ 表示匹配至少一个空格字符)。然后使用 reg.Split 方法对字符串进行分割,第二个参数 -1 表示返回所有子串。