V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qW7bo2FbzbC0
V2EX  ›  程序员

为什么分割字符串时开头或者结尾为关键词时,会生成空字符串

  •  
  •   qW7bo2FbzbC0 · 2020-07-20 16:32:37 +08:00 · 1803 次点击
    这是一个创建于 1348 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,写了几年的程序今天 debug 时才发现这个问题,

    本来是直接取 rawResults[0], 但运行时总是出错。

    不太明白为什么是这种逻辑

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

    ["", "CC"]

    @littleylv 说的有差别
    apporoad
        9
    apporoad  
       2020-07-21 04:50:01 +08:00
    @pixiaotiao 代码果然是最好的解释
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2866 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:37 · PVG 19:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.