遇到问题
Golang 中默认的 strings.Split
方法对于字符串分隔的能力有限,仅支持一次对单个分隔符进行操作:
1 | s := "11111|2222||3333||4444|" |
如果想要一次处理多个分隔符的情况,使用 strings.Split
就会出错:
1 | s := "11111|2222||3333,4444,,555" |
可以看到并没有对字符串做处理,直接返回了。
如果想要支持多个分隔符,则需要分别进行处理。
而且还有一点,Split
对于 为空
的情况并不能自行处理。如上面第一个示例,可以看到输出的结果中是有空内容存在的。
如何解决
遇到这种情况,可以使用 strings
中另一个方法 strings.FieldsFunc
来进行处理。
1 | s := "11111|2222||3333,4444,,555" |
可以看到得到了我们想要的结果。另外,其中的 ContainsRune
方法也自动对 空内容
进行了过滤。
另外,对于其中的处理函数 func(r rune) bool {}
我们也可以任意更改操作逻辑,以应对不同的需求。
深入探究
Golang中的strings.FieldsFunc()函数用于在每次运行满足
f(c)
的Unicode代码点c
时拆分给定的字符串str,并返回由str组成的切片数组。
相应的语法:
1 | func FieldsFunc(str string,f func(rune bool)[] string |
返回值:如果str中的所有代码点都满足 f(c)
或字符串为空,则返回一个空片。
再举一个示例:
1 | f := func(c rune) bool { |
整理
将其整理成一个工具方法:
1 | // 对字符串使用任意字符分隔 |