strings包裡面的Split函數的坑

來源:互聯網
上載者:User

無論哪種開發語言,Split函數都是經常用到。最近發現了strings包裡的Split函數有個坑,真是活久見。

package mainimport "fmt"import "strings"func main() {    str := ""    v := strings.Split(str, "#")    if len(v)%2 != 0 {        fmt.Printf("v len is [%d]", len(v))    }}

期望獲得結果應該是0,因為經常讀資料欄位的時候會做是不是幾元組的判斷。實際輸出為:

v len is [1]

來看Split的實現

 func genSplit(s, sep string, sepSave, n int) []string {    if n == 0 {        return nil    }    if sep == "" {        return explode(s, n)    }    if n < 0 {        n = Count(s, sep) + 1    }    c := sep[0]    start := 0    a := make([]string, n)    na := 0    for i := 0; i+len(sep) <= len(s) && na+1 < n; i++ {        if s[i] == c && (len(sep) == 1 || s[i:i+len(sep)] == sep) {            a[na] = s[start : i+sepSave]            na++            start = i + len(sep)            i += len(sep) - 1        }    }    a[na] = s[start:]    return a[0 : na+1]}

可以看到最後的返回的slice最少也有一個值。細節要多注意啊,不能用固有觀念來看新東西。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.