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的首部和尾部的連續字元將被刪除。*/<