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