
如题,写了几年的程序今天 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 用你的例子 ['','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 如果没有这个空字符串,你就无法从分割出来的数组反推出原字符串吧。 比如 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 U7Q5tLAex2FI0o0g 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 代码果然是最好的解释 |