go1.6.2 strings.Split()我觉得有些问题
来源:互联网 发布:武汉淘宝大学官网 编辑:程序博客网 时间:2024/05/22 03:37
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
}
之后调用即可达到预期返回值
- go1.6.2 strings.Split()我觉得有些问题
- 我觉得markdown编辑器的问题
- 我觉得
- Parsing Strings with split
- 555. Split Concatenated Strings
- php的一些常识问题,我觉得还是有用的,所以,我觉得要学习哦!
- 以前写的一个XML文件的助手类,现在看起来觉得有的地方不好而难用,不过我觉得还是有些启发吧(C#,XML)
- 随笔——关于我的测试职业生涯 (嘻嘻,觉得这个标题,有些知音体,嗯。。。)
- 有些问题
- 有些问题
- 我觉得 我伟大
- 觉得最近变得有些懒了
- 的女子不由觉得有些一路走来
- 【吐槽】 我觉得emacs的排版有问题……
- 我觉得自己...
- 我觉得很奇怪
- 我觉得ok#6
- 我有些忧郁怎么办?
- 【ZOJ3195】Design the City-LCA算法
- Qt QMediaPlayer(铺满整个窗口)
- Magic c++ 一个好的可视化Linux开发工具
- uva12166 修改天平 元素的贡献值-最优解
- 一个巧妙地方式改变input的默认样式
- go1.6.2 strings.Split()我觉得有些问题
- Java虚拟机类加载机制---深入理解Java虚拟机
- Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
- uva11882 最大的数 bfs 遍历估价剪枝
- mysql笔记一 ----mysql数据库的安装和基础指令
- uva11853 图 范围节点的处理和遍历
- hdu5795A Simple Nim
- Android studio 多渠道打包
- css排雷第二部分:高级web标准解决方案