Go語言學習(十)bytes包處理位元組切片

來源:互聯網
上載者:User

bytes包提供了對位元組切片進行讀寫操作的一系列函數
位元組切片處理的函數比較多,分為基本處理函數,比較函數,尾碼檢查函數,索引函數,分割函數,
大小寫處理函數和子切片處理函數等. 1.位元組切片基本處理函數api 1.1Contains()函數

//Contains()函數的功能是檢查位元組切片b是否包含子切片subslice,如果包含返回true,否則返回false.func Contains(b,subslice []bytes) bool
1.2Count()函數
//Count()函數的功能是計算位元組切片sep在位元組切片s中非重疊顯示的個數.func Count(s,sep[]byte) int
1.3Repeat()函數
//Repeat()函數的功能是把切片b複製count個,然後合成一個新的位元組切片返回.func Repeat(b[]byte,count int) []byte
1.4Replace()函數
/*Replace()函數的功能是返回位元組切片s的一個副本,並把前n個不重疊的子切片old替換為new;如果n<0,則不限制替換的數量.參數n為替換的次數*/func Replace(s,old,new []byte,n int) []byte
1.5Runes()函數
//Runes()函數的功能是把s轉換為UTF-8編碼的位元組序列,並返回對應的Unicode切片.func Runes(s []byte) []rune
1.6Join()函數
Join函數的功能是用位元組切片sep把s中的每個位元組切片連成一個位元組切片並返回.func Join(s [][]byte,sep[]byte) []byte
[執行個體]
package mainimport(    "fmt"    "bytes")func main(){    //Contains    b := []byte("mChenys") //字串強轉為byte切片    sublice1 := []byte("m")    sublice2 := []byte("M")    fmt.Println(bytes.Contains(b,sublice1))//true    fmt.Println(bytes.Contains(b,sublice2))//false    //Count    s := []byte("hahaahaaa")    sep1 := []byte("hah")    sep2 := []byte("aa")    sep3 := []byte("a")    fmt.Println(bytes.Count(s,sep1))//1    fmt.Println(bytes.Count(s,sep2))//2    fmt.Println(bytes.Count(s,sep3))//6    //Repeat    b = []byte("ha")    fmt.Println(string(bytes.Repeat(b,1)))//ha    fmt.Println(string(bytes.Repeat(b,2)))//haha    //Replace    s = []byte("hello,world")    old := []byte("o")    news := []byte("ee")    fmt.Println(string(bytes.Replace(s,old,news,0)))//hello,world    fmt.Println(string(bytes.Replace(s,old,news,1)))//hellee,world    fmt.Println(string(bytes.Replace(s,old,news,2)))//hellee,weerld    fmt.Println(string(bytes.Replace(s,old,news,-1)))//hellee,weerld    //Runes    s = []byte("你好世界")    r := bytes.Runes(s)    fmt.Println("轉換前字串的長度: ",len(s))//12    fmt.Println("轉換後字串的長度: ",len(r))//4    //Join    s := [][]byte{[]byte("你好"),[]byte("世界")}    sep1 := []byte(",")    fmt.Println(string(bytes.Join(s,sep1)))//你好,世界    sep2 := []byte("#")    fmt.Println(string(bytes.Join(s,sep2)))//你好#世界}
2.位元組切片比較函數 2.1Compare()函數
/*Compare()函數的功能是根據位元組的值比較位元組切片a和b的大小,如果a=b,返回0,如果a>b返回1,如果a<b返回-1.*/func Compare(a,b[]byte) int
2.2Equal()函數
/*Equal()函數的功能是用來比較2個位元組切片是否相等,如果參數為nil,則等同於空的位元組切片,如果a=b,則返回true,否則返回false.區分大小寫*/func Equal(a,b[]byte) bool

2.3EqualFold()函數

/*EqualFold()函數的功能是把s和t轉換成UTF-8字串進行比較,並且忽略大小寫,如果s=t,返回true,否則,返回false.*/func EqualFold(s,t[]byte) bool
[執行個體]
package mainimport(    "fmt"    "bytes")func main(){    //Compare    a := []byte("abc")    b := []byte("a")    fmt.Println(bytes.Compare(a,b))//1     b =[]byte("abcd")    fmt.Println(bytes.Compare(a,b))//-1    b =[]byte("abC")    fmt.Println(bytes.Compare(a,b))//1  小寫字母大於大寫字母    b =[]byte("b")    fmt.Println(bytes.Compare(a,b))//-1 從第一個位元組開始比較,如果相同再比較長度    //Equal    a = []byte("abc")    b = []byte("ABC")    fmt.Println(bytes.Equal(a,b))//false    fmt.Println(bytes.Equal(a,nil))//false    b = []byte("abc")    fmt.Println(bytes.Equal(a,b))//true    //EqualFold    a = []byte("abc")    b = []byte("ABC")    fmt.Println(bytes.EqualFold(a,b))//true}
3.位元組切片前尾碼檢查 3.1HasPrefix()函數
//HasPrefix()函數的功能是檢查位元組切片s的首碼是否為prefix,如果是返回true,如果不是返回false.func HasPrefix(s,prefix[]byte) bool
3.2HashSuffix()函數
//HashSuffix()函數的功能是檢查位元組切片s的尾碼是否為suffix,如果是返回true,否則返回false.func HashSuffix(s,suffix[]byte) bool
[執行個體]
package mainimport(    "fmt"    "bytes")func main(){    //HasPrefix    s := []byte("mChenys")    prefix := []byte("m")    fmt.Println(bytes.HasPrefix(s,prefix))//true    prefix = []byte("men")    fmt.Println(bytes.HasPrefix(s,prefix))//false    //HashSuffix    suffix := []byte("ys")    fmt.Println(bytes.HasSuffix(s,suffix))//true}
4.位元組切片位置索引函數

位元組切片位置索引函數共有8個,Index(),IndexAny(),IndexByte(),IndexFunc(),IndexRune(),
LastIndex(),LastIndexAny()和LastIndexFunc(). 4.1index()函數

//返回sep在s中第一次出現的位置索引(從0開始),如果sep中不在s中則返回-1.func Index(s,sep []byte) int
4.2IndexAny()函數
/*把s解析為UTF-8編碼的位元組序列,返回chars中任何一個字元在s中第一次出現的索引位置;如果s中不包含chars中任何一個字元,則返回-1.*/func IndexAny(s []byte,chars string) int
4.3IndexByte()函數
//函數的功能是檢查位元組c在s中第一次出現的位置索引;如果s中不包含c則返回-1.func IndexByte(s[]byte,c byte) int
4.4IndexFunc()函數
/*的功能是把s解析為UTF-8位元組序列,並返回一個滿足f(c)=true的字元c的位置索引,如果沒有滿足則返回-1.*/func IndexFunc(s[]byte,f func(r rune)bool) int
4.5IndexRune()函數
/*功能是把s解析為UTF-8位元組序列,並返回rune類型的字元r在s中的位置索引,如果s中不包含r則返回-1.*/func IndexRune(s[]byte,r rune) int
4.6LastIndex()函數
//的功能是返回sep在s中最後一次出現的位置索引,如果s中不包含sep,則返回-1func LastIndex(s,sep[]byte) int
4.7LastIndexAny()函數
/*的功能是把s解析為UTF-8位元組序列,返回chars中任何一個字元在s中最後出現的位置索引,如果chars為空白或者s中不包含chars中的任一字元,則返回-1*/func LastIndexAny(s[]byte,chars string) int
4.8LastIndexFunc()函數
/*功能是把s解析成UTF-8位元組序列,返回滿足f(s)=true的字元c在s中最後一次出現的位置索引,如果沒有找到則返回-1.*/func LastIndexFunc(s[]byte,f func(r rune)bool) int
[執行個體]
package mainimport(    "fmt"    "bytes")func main(){    //Index    a := []byte("aaaaa")    fmt.Println(bytes.Index(a,[]byte("a")))//0    fmt.Println(bytes.Index(a,[]byte("aa")))//0    fmt.Println(bytes.Index(a,[]byte("b")))//-1    //IndexAny    fmt.Println(bytes.IndexAny(a,"a"))//0    fmt.Println(bytes.IndexAny(a,"aa"))//0    //IndexByte    s := []byte("google")    var ch byte = 'g'    fmt.Println(bytes.IndexByte(s,ch))//0    //IndexFunc,可以接收匿名函數    fmt.Println(bytes.IndexFunc(s,func (a rune)bool{        if a == 'o'{            return true        }else{            return false        }    }))//1    //IndexRune    fmt.Println(bytes.IndexRune(s,'e'))//5    fmt.Println(bytes.IndexRune(s,'a'))//-1    //LastIndex    fmt.Println(bytes.LastIndex(s,[]byte("g")))//3    fmt.Println(bytes.LastIndex(s,[]byte("e")))//5    fmt.Println(bytes.LastIndex(s,[]byte("o")))//2    //LastIndexAny    fmt.Println(bytes.LastIndexAny(s,"gle"))//5    fmt.Println(bytes.LastIndexAny(s,"l"))//4    fmt.Println(bytes.LastIndexAny(s,"ge"))//5    //LastIndexFunc    fmt.Println(bytes.LastIndexFunc(s,func(r rune)bool{        if r=='g'{            return true        }else {            return false        }    }))//3}
5.位元組切片分割函數

位元組切片分割函數共有6個,Fields(),FieldsFunc(),Split(),SplitN(),
SplitAfter()和SplitAfterN() 5.1Fields()函數

/*功能是把位元組切片s按照一個或者連續多個空白字元分割成多個位元組切片,如果s只包含空白字元則返回空位元組切片,其中參數s準備分割的位元組切片.*/func Fields(s[]byte) [][]byte wq
5.2FieldsFunc()函數
/*功能是把s解析為UTF-8位元組序列,對於每個Unicode字元c,如果f(c)返回true就把c作為分割字元對s進行拆分.如果所有字元都滿足f(c)為true,則返回空切片.*/func FieldsFunc(s []byte,f func(r rune)bool) [][]byte
5.3Split()函數
/*功能是把s用sep分割成多個位元組切片並返回,如果sep為空白,Split則把s切分成每個位元組切片對應一個UTF-8字元,Split()等效於參數為n的splitN()函數.*/func Split(s,sep[]byte)[][]byte
5.4SplitAfter()函數
/*功能使用sep作為尾碼把s切分成多個位元組切片並返回。如果sep為空白,則把s切分成每個位元組切片對應一個UTF-8字元*/func SplitAfter(s,sep[]byte)[][]byte
5.5SplitAfterN()函數
/*功能是用sep作為尾碼把s切分成多個位元組切片並返回。如果sep為空白,則把s切分成每個位元組切片對應一個UTF-8字元。參數n決定返回切片的長度:如果n>0,最多返回n個子位元組切片,子切片可能包含未切分的位元組序列;如果n=0,返回空切片如果n< 0返回所有子切片。*/func SplitAfterN(s,sep[]byte,n int)[][]byte
5.6SplitN()函數
/*功能是把s用sep分割成多個位元組切片並返回,如果sep為空白,Split則把s切分成每個位元組切片對應一個UTF-8字元,參數n決定返回長度,n>0最多返回那個子切片;n==0什麼都不返回,n<0返回空子切片.*/func SplitN(s,sep []byte,n int)[][]byte
[執行個體]
package mainimport(    "fmt"    "bytes")func main(){    //Fields ,返回的是2維切片    s := []byte("a b   c")    for _,v := range bytes.Fields(s){         //遍曆擷取1維切片,再強轉為字串        fmt.Print(string(v)+",") //a,b,c,    }    //FieldsFunc,返回是2維切片,接收匿名函數    for _,v := range bytes.FieldsFunc(s,func(r rune)bool{        if r == ' '{            return true //按照空白字元分割        }else{            return false        }    }){        fmt.Print(string(v)+",")//a,b,c,    }    //Split    s = []byte("吃飯和睡覺")    for _,v := range bytes.Split(s,[]byte("和")){        fmt.Print(string(v)+",")//吃飯,睡覺,    }    for _,v := range bytes.Split(s,nil){        fmt.Print(string(v)+",")//吃,飯,和,睡,覺,    }    //SplitAfter    s = []byte("abbcbbd")    for _,v := range bytes.SplitAfter(s,[]byte("bb")){        fmt.Print(string(v)+",")//abb,cbb,d,    }    for _,v := range bytes.SplitAfter(s,nil){        fmt.Print(string(v)+",")//a,b,b,c,b,b,d,    }    //SplitAfterN    s = []byte("hehehe")    for _,v := range bytes.SplitAfterN(s,[]byte("he"),0){        fmt.Print(string(v)+",") //什麼都不輸出    }    for _,v := range bytes.SplitAfterN(s,[]byte("he"),1){        fmt.Print(string(v)+",")//hehehe,    }    for _,v := range bytes.SplitAfterN(s,[]byte("he"),-1){        fmt.Print(string(v)+",")//he,he,he,,    }    //SplitN    s = []byte("hahaha")    for _,v := range bytes.SplitN(s,[]byte("ha"),0){        fmt.Print(string(v)+",") //什麼都不輸出    }    for _,v := range bytes.SplitN(s,[]byte("ha"),1){        fmt.Print(string(v)+",")//hahaha,    }    for _,v := range bytes.SplitN(s,[]byte("ha"),-1){        fmt.Print(string(v)+",")//,,,,    }}
6.位元組切片大小寫處理

共有7個函數,Title(),ToTitle(),ToTitleSpecial(),ToLower(),ToLowerSpecial(),ToUpper()
和ToUpperSpecial(). 6.1Title()函數

//的功能是返回一個s的副本,把s中每個單詞的首字母改成Unicode字元大寫.func Title(s[]byte) []byte
6.2ToTitle()函數
//的功能是返回s的一個副本,並把其中所有Unicode字元轉為大寫.func ToTitle(s []byte) []byte
6.3ToTitleSpecial()函數
/*功能是返回s的一個副本,並把其中所有Unicode字元根據_case指定的規則轉成大寫.*/func ToTitleSpecial(_case unicode.SpecialCase,s []byte) []byte
6.4ToLower()函數
//的功能是返回s的一個副本,並把其中的所有Unicode字元轉為小寫.func ToLower(s []byte)[]byte
6.5ToLowerSpecial()函數
/*功能是返回s的一個副本,並把其中所有Unicode字元都根據_case指定的規則轉換成小寫.*/func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte 
6.6ToUpper()函數
//是返回s的一個副本,並把其中所有Unicode字元都轉為大寫.func ToUpper(s []byte) []byte 
6.7ToUpperSpecial()函數
/*的功能是返回s的一個副本,並把其中所有Unicode字元都根據_case指定的規則轉成大寫.*/func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte
package mainimport(    "fmt"    "bytes"    "unicode")func main(){    s := []byte("abc")    fmt.Println(string(bytes.Title(s)))//Abc    fmt.Println(string(bytes.ToTitle(s)))//ABC    fmt.Println(string(bytes.ToTitleSpecial(unicode.AzeriCase,s)))//ABC    s = []byte("ABC")    fmt.Println(string(bytes.ToLower(s)))//abc    fmt.Println(string(bytes.ToLowerSpecial(unicode.AzeriCase,s)))//abc    s = []byte("abc")    fmt.Println(string(bytes.ToUpper(s)))//ABC    fmt.Println(string(bytes.ToUpperSpecial(unicode.AzeriCase,s)))//ABC}
7.子位元組切片處理函數

共有9個,Trim(),TrimFunc(),TrimLeft(),TrimLeftFunc(),TrimRight(),TrimRightFunc(),
TrimSpace(),TrimPrefix()和TrimSuffix(). 7.1Trim()函數

/*的功能是返回s的子位元組切片,cutset中任意出現在s的首部和尾部的連續字元將被刪除。*/<
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.