格式
strings.Split(s, sep)
// s: 被切割的字符串
// sep: 分隔符
return 字符串切片,如:[1,s2,d32,cv4512,v0001,s0d,vj]
示例 & 存在的情况
package main
import (
"fmt"
"strings"
)
func main() {
s := "1,s2,d32,cv4512,v0001,s0d,vj"
// sep存在字符串
fmt.Print(strings.Split(s, ","))
// sep不存在的情况
fmt.Print(strings.Split(s, ""))
// s不存在的sep的情况
fmt.Print(strings.Split(s, " "))
// 只有一个的情况
fmt.Print(strings.Split(s, "j"))
// 参数都是空字符串
fmt.Println(strings.Split("", ""))
}
// 执行如下
[1 s2 d32 cv4512 v0001 s0d vj]
[1 , s 2 , d 3 2 , c v 4 5 1 2 , v 0 0 0 1 , s 0 d , v j]
[1,s2,d32,cv4512,v0001,s0d,vj]
[1,s2,d32,cv4512,v0001,s0d,v ]
[]
在使用字符串切割时,会存在一下几种情况
- sep在被切割的字符串中存在
- 切割空字符串
- 切割字符串在被切割字符串中不存在
- 切割字符串只有一个
- 参数都是空字符串
func main() {
s := "1,s2,d32,cv4512,v0001,s0d,vj"
// sep存在字符串
fmt.Println(strings.Split(s, ","))
// sep不存在的情况
fmt.Println(strings.Split(s, ""))
// s不存在的sep的情况
fmt.Println(strings.Split(s, " "))
// 参数都是空字符串
fmt.Println(strings.Split("", ""))
// 只有一个的情况
fmt.Println(strings.Split(s, "j"))
}
源码
// s分割的字符串 sep分隔符 SepSave默认0 n默认-1
func genSplit(s, sep string, sepSave, n int) []string {
if n == 0 {
return nil
}
// 分隔符等于空字符串的情况
if sep == "" {
return explode(s, n)
// explode具体源码就是将字符串以此将分隔符之前的数据全部拿出,然后再赋值给s
// a[i] = s[:size] s = s[size:]
}
if n < 0 {
n = Count(s, sep) + 1
}
a := make([]string, n)
n--
i := 0
for i < n {
m := Index(s, sep)
if m < 0 {
break
}
a[i] = s[:m+sepSave]
s = s[m+len(sep):]
i++
}
a[i] = s
return a[:i+1]
}