如题,写了几年的程序今天 debug 时才发现这个问题,
本来是直接取 rawResults[0], 但运行时总是出错。
不太明白为什么是这种逻辑
"BC".split('B')
# ['', 'C']
for _,i := range strings.Split("BCB", "B"){
fmt.Println(i+"@")
}
// @
// C@
// @
1
pixiaotiao 2020 年 7 月 20 日 via Android 用你的例子 ['','C'].join('B'); ['C'].join('B'); 自己品
|
2
goofool 2020 年 7 月 20 日
s[0:0]是有效的,返回空字符串
|
3
shintendo 2020 年 7 月 20 日 如果没有这个空字符串,你就无法从分割出来的数组反推出原字符串吧。
比如 str.split('B') == ['C'],你无法知道 str 是 BC 还是 CB 还是 BCB |
4
misaka19000 2020 年 7 月 20 日
看下源代码不就知道了
|
5
aguesuka 2020 年 7 月 20 日
大概是双射函数?
|
6
U7Q5tLAex2FI0o0g 2020 年 7 月 20 日
当分隔符恰好在最前面的时候,第一个肯定是空字符串;
当分隔符恰好在最后面的时候,最后一个肯定是空字符串。 这是必须的。Python PHP JS 都是这样的结果 |
7
mornlight 2020 年 7 月 20 日
rawResults[0] 逻辑上取的是第一个分隔符左边的字符串。空串不能扔掉,不然乱了。
|
8
crella 2020 年 7 月 20 日 via Android
|
9
apporoad 2020 年 7 月 21 日
@pixiaotiao 代码果然是最好的解释
|