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