go語言中bytes包的常用函數,Reader和Buffer的使用

來源:互聯網
上載者:User

標籤:建立   hello   char   尋找   負數   compare   adb   false   replace   

bytes中常用函數的使用:

package main;import ("bytes""fmt""unicode")//bytes包中實現了大量對[]byte操作的函數和兩個最主要的Reader和Buffer兩個結構func main() {str := "aBcD";//轉為小寫fmt.Println(string(bytes.ToLower([]byte(str))));//轉為大寫fmt.Println(string(bytes.ToUpper([]byte(str))));//轉為標題,fmt.Println(string(bytes.ToTitle([]byte(str))));//自訂映射表mycase := unicode.SpecialCase{unicode.CaseRange{//1,1表示替換規則隻影響1到1之間的字元1,1,[unicode.MaxCase]rune{//大寫轉換‘壹‘ - 1,//小寫轉換‘一‘ - 1,//標題轉換‘小‘ - 1,},},unicode.CaseRange{2,2,[unicode.MaxCase]rune{‘貳‘ - 2,‘二‘ - 2,‘中‘ - 2,},},unicode.CaseRange{3,3,[unicode.MaxCase]rune{‘三‘ - 3,‘三‘ - 3,‘大‘ - 3,},},};//使用映射表將[]byte中字元修改為小寫data := bytes.ToLowerSpecial(mycase,[]byte{1, 2, 3},)fmt.Println(string(data));//使用映射表將[]byte中字元修改為大寫data = bytes.ToUpperSpecial(mycase,[]byte{1, 2, 3},);fmt.Println(string(data));//使用映射表將[]byte中字元修改為標題data = bytes.ToTitleSpecial(mycase,[]byte{1, 2, 3},);fmt.Println(string(data));//將[]byte中單詞首字元修改為Title並返回fmt.Println(string(bytes.Title([]byte("abc def"))));//比較兩個[]byte,// a < b 返回 -1// a == b 返回 0// b > b 返回 1fmt.Println(bytes.Compare([]byte("a"), []byte("b")));//比較兩個[]byte是否相等fmt.Println(bytes.Equal([]byte("abc"), []byte("abc")));//比較兩個[]byte是否相等,忽略大寫,小寫,標題fmt.Println(bytes.EqualFold([]byte("ABC"), []byte("abc")));//去掉[]byte兩邊包含在cutset中的字元fmt.Println(string(bytes.Trim([]byte(" abc "), " ")));//去掉左邊包含在cutset中的字元fmt.Println(string(bytes.TrimLeft([]byte(" abc "), " ")));//去掉右邊包含在cutset中的字元fmt.Println(string(bytes.TrimRight([]byte(" abc "), " ")));//去掉兩邊空白字元fmt.Println(string(bytes.TrimSpace([]byte(" abc "))));//去掉首碼fmt.Println(string(bytes.TrimPrefix([]byte("tb_user"), []byte("tb_"))));//去掉尾碼fmt.Println(string(bytes.TrimSuffix([]byte("user_idx"), []byte("_idx"))));//以sep為分隔字元,切分為多個[]bytetmp := bytes.Split([]byte("ab cd ef"), []byte(" "));for _, v := range tmp {fmt.Println(string(v));}//分割最多n個子切片,超出n的部分將不進行切分tmp = bytes.SplitN([]byte("ab cd ef"), []byte(" "), 2);for _, v := range tmp {fmt.Println(string(v));}//以sep為分隔字元,切分為多個[]byte,結果包含分隔字元,在子串尾部tmp = bytes.SplitAfter([]byte("ab,cd,ef"), []byte(","));for _, v := range tmp {fmt.Println(string(v));}//分割最多n個子切片,超出n的部分將不進行切分tmp = bytes.SplitAfterN([]byte("ab,cd,ef"), []byte(","), 2);for _, v := range tmp {fmt.Println(string(v));}//以空白字元切分tmp = bytes.Fields([]byte("a b c d"));for _, v := range tmp {fmt.Println(string(v));}//以符合函數的字元作為分隔字元來切分tmp = bytes.FieldsFunc([]byte("asbscsd"), func(r rune) bool {if r == rune(‘s‘) {return true;}return false;});for _, v := range tmp {fmt.Println(string(v));}//以sep為串連符,拼接[][]bytefmt.Println(string(bytes.Join([][]byte{[]byte("aa"),[]byte("bb"),[]byte("cc"),},[]byte("-"),)));//重複[]byte,Count次fmt.Println(string(bytes.Repeat([]byte("abc"), 3)));//判斷是否有首碼fmt.Println(bytes.HasPrefix([]byte("is_true"), []byte("is_")));//判斷是否有尾碼fmt.Println(bytes.HasSuffix([]byte("chk_on"), []byte("_on")));//判斷是否包含某個[]bytefmt.Println(bytes.Contains([]byte("i am jack"), []byte("jack")));//判斷是否包含某個runefmt.Println(bytes.ContainsRune([]byte("i from 中國"), rune(‘中‘)));//尋找sep在參數一中第一次出現的位置,找不到返回-1fmt.Println(bytes.Index([]byte("abcabc"), []byte("a")));fmt.Println(bytes.IndexByte([]byte("cba"), ‘a‘));fmt.Println(bytes.IndexRune([]byte("i from 中國"), rune(‘中‘)));//尋找chars中任意一個字元在參數一中出現的位置,找不到返回-1fmt.Println(bytes.IndexAny([]byte("hello world"), "xy"));//功能同上,只不過尋找最後一次出現的位置fmt.Println(bytes.LastIndex([]byte("abcabc"), []byte("a")));fmt.Println(bytes.LastIndexByte([]byte("cba"), ‘a‘));fmt.Println(bytes.LastIndexAny([]byte("hello world"), "xy"));//擷取sep中在參數一中出現的次數fmt.Println(bytes.Count([]byte("a|b|c"), []byte("|")));//將參數一中前n個old替換成new,n小於0則全部替換。fmt.Println(string(bytes.Replace([]byte("i am jack"),[]byte("i am"),[]byte("我是"),-1,),));//將[]byte中的字元替換為函數的傳回值,如果傳回值為負數,則丟棄訪字元。fmt.Println(string(bytes.Map(func(r rune) rune {if r == ‘a‘ {return ‘A‘;} else if r == ‘c‘ {return -1;}return r;},[]byte("abcd"),),));//將[]byte轉換為[]runefmt.Println(string(bytes.Runes([]byte("我是誰"))));}

bytes中Reader和Buffer的使用:

package main;import ("bytes""fmt")//bytes中Reader和Buffer兩個結構的使用func useReader() {data := "abcdefghijk";//通過[]byte建立Readerre := bytes.NewReader([]byte(data));//返回未讀取部分的長度fmt.Println("re len : ", re.Len());//返回底層資料總長度fmt.Println("re size : ", re.Size());buf := make([]byte, 2);for {//讀取資料n, err := re.Read(buf);if err != nil {break;}fmt.Println(string(buf[:n]));};//設定位移量,因為上面的操作已經修改了讀取位置等資訊re.Seek(0, 0);for {//一個位元組一個位元組的讀b, err := re.ReadByte();if err != nil {break;}fmt.Println(string(b));}re.Seek(0, 0);off := int64(0);for {//指定位移量讀取n, err := re.ReadAt(buf, off);if err != nil {break;}off += int64(n);fmt.Println(off, string(buf[:n]));}}func useBuffer() {data := "123456789";//通過[]byte建立一個Bufferbf := bytes.NewBuffer([]byte(data));//Len()返回未讀取的資料長度fmt.Println("bf len : ", bf.Len());//Cap()緩衝容量fmt.Println("bf cap : ", bf.Cap());//Bytes()返回未讀取的資料切片bys := bf.Bytes();for _, v := range bys {fmt.Print(string(v) + " ");}fmt.Println();//Next()返回未讀取部分前n位元組資料的切片for i := 0; i < 10; i++ {tmp := bf.Next(1);fmt.Print(string(tmp) + " ");}fmt.Println();//再次Next,返回[]byte,說明沒有未讀取的fmt.Println(bf.Next(1));//重設緩衝,丟棄全部內容bf.Reset();//通過string建立Bufferbf2 := bytes.NewBufferString(data);//讀取第一個 delim 及其之前的內容,返回遇到的錯誤line, _ := bf2.ReadBytes(‘3‘);fmt.Println(string(line));//效果同上,返回stringline2, _ := bf2.ReadString(‘7‘);fmt.Println(line2);//建立一個空Bufferbf3 := bytes.Buffer{};//自動增加緩衝容量,保證有n位元組剩餘空間bf3.Grow(16);//寫入rune編碼,返回寫入的位元組數和錯誤。n, _ := bf3.WriteRune(rune(‘中‘));fmt.Println("bf3 write ", n);n, _ = bf3.WriteString("國人");fmt.Println("bf3 write ", n);//返回未讀取的字串fmt.Println(bf3.String());//將資料長度截斷到n位元組bf3.Truncate(6);fmt.Println(bf3.String());}func main() {//防止main中代碼過多,我建立兩個函數單獨寫useReader();useBuffer();}

  

go語言中bytes包的常用函數,Reader和Buffer的使用

聯繫我們

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