go1.6.2 strings.Split()我觉得有些问题

go1.6.2 strings.Split()bug

当调用strings.Split(s,seq string)时,如果seq连续出现,比如s=" dfdgdfg (多个空格) dfdg (多个空格) hghyjkjuyk "。调用slice:=strings.Split(s," ")将会出现len(slice)!=3,我认为这并不是大家希望看到的结果。

查看strings.Split(s,seq string)源码:
func Split(s, sep string) []string { return genSplit(s, sep, 0, -1) }

接着查看strings.genSplit()源码:
func genSplit(s, sep string, sepSave, n int) []string {
if n == 0 {
return nil
}
if sep == "" {
return explode(s, n)
}
if n < 0 {
n = Count(s, sep) + 1
}
c := sep[0]
start := 0
a := make([]string, n)
na := 0
for i := 0; i+len(sep) <= len(s) && na+1 < n; i++ {
if s[i] == c && (len(sep) == 1 || s[i:i+len(sep)] == sep) {
a[na] = s[start : i+sepSave]
na++
start = i + len(sep)
i += len(sep) - 1
}
}
a[na] = s[start:]
return a[0 : na+1]
}

发现并没有做相关的判断就将s[start : i+sepSave]添加到返回数组造成出现这种情况;

顾在for循环中添加一个判断以达到预期返回值,代码如下:
if s[i] == c && (len(sep) == 1 || s[i:i+len(sep)] == sep) {
splitStr:=s[start : i+sepSave]
if !(splitStr == sep || start==i+sepSave) {
a[na] = splitStr
na++
}
start = i + len(sep)
i += len(sep) - 1
}

之后调用即可达到预期返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值