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