天天看點

位元組bytes的操作大全

本節要講的内容将是一個重點内容

  • 1.位元組切片比較
  • 2.位元組切片判斷
  • 3.位元組切片是否包含另外切片的值
  • 4.位元組切片是否包含相同UTF-8的字元
  • 5.字元切片是否包含相同的 Unicode編碼字元
  • 6.字元切片a中包含多少組不重複的Unicode編碼切片b
  • 7.将切片按照空格分割成多個子切片
  • 8.将切片按照指定的規則分割成多個子切片
  • 9.位元組切片是否包含字首字元切片
  • 10.位元組切片是否包含字尾切片
  • 11.擷取第一個子切片所在的位置index
  • 12.擷取切片b中任意一個Unicode編碼字元第一次出現在切片a中的位置
  • 13.擷取字元b 第一次出現在切片a中的位置
  • 14.傳回第一個滿足規則的unicode編碼字元b,在切片a中的位置
  • 15.傳回uncode編碼第一次出現在切片a中的位置
  • 16.将多個切片通過字元連接配接成一個大的切片
  • 17.傳回切片b最後一次出現在切片a的索引
  • 18.傳回字元切片b中任意字元,最後一次出現在切片a中的位置
  • 19.傳回字元b最後一次出現在切片a中的位置
  • 20.傳回指定規則下,傳回字元最後出現在切片a中的位置
  • 21.map方法處理數組資料
  • 22.将字元切片,重複n此組成新的切片
  • 23.用新的切片,替換切片a中的子切片的資料
  • 24.将utf-8的字元切片轉換為rune切片
  • 25.将切片按照字元切片b分割成多個子切片數組,不包含切片b
  • 26.将切片按照字元切片b分割成多個子切片數組,包含切片b
  • 27.将切片按照字元切片b分割成n個子切片數組,如果數量達到n則不在繼續分割
  • 28.切片字元中,按照空格劃分成字元串,首字元設定大寫
  • 29.切片全部轉換為小寫
  • 30.切片全部轉換為小寫
  • 31.從左邊開始切割字元切片s中出現的字元切片b,傳回剩餘的資料
  • 32.從右邊開始切割字元切片s中出現的字元切片b,傳回剩餘的資料

1.位元組切片比較

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte{'b','a'}
  b = []byte{'c'}
  fmt.Println(bytes.Compare(a,b))

}           

複制

位元組bytes的操作大全

image.png

兩個切片,從下标0的位置,以此進行比較,如果值相等,則進行後面的值比較,直到資料不相等,如果值a > 值b 則傳回 1, a == b 傳回 0,否則傳回-1

2.位元組切片判斷

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte{'b','a'}
  b = []byte{'c'}
  fmt.Println(bytes.Equal(a,b))
}           

複制

判斷規則和上面一緻

位元組bytes的操作大全

image.png

3.位元組切片是否包含另外切片的值

func Contains(b, subslice []byte) bool

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte{'b','a','c'}
  b = []byte{'c'}
  fmt.Println(bytes.Contains(a,b))
}           

複制

位元組bytes的操作大全

image.png

4.位元組切片是否包含相同UTF-8的字元

func ContainsAny(b []byte, chars string) bool

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a []byte
  a = []byte{'b','a','c'}

  fmt.Println(bytes.ContainsAny(a,"abcde"))
}           

複制

檢測規則如下

ContainsAny 檢測chars的任何 UTF-8 編碼的 Unicode 代碼點是否在 b 中。

5.字元切片是否包含相同的 Unicode編碼字元

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a []byte
  a = []byte("我愛你")
  var c rune = '我'
  fmt.Println(bytes.ContainsRune(a,c))
}           

複制

位元組bytes的操作大全

image.png

6.字元切片a中包含多少組不重複的Unicode編碼切片b

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte("我我我愛你")
  b = []byte("我")
  fmt.Println(bytes.Count(a,b))
}           

複制

位元組bytes的操作大全

image.png

如何 b為空 怎麼傳回 len(a) + 1 ,即 6

如下

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte("我我我愛你")
  b = []byte("")
  fmt.Println(bytes.Count(a,b))
}           

複制

位元組bytes的操作大全

image.png

7.不區分大小寫 比較兩個切片的大小

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a,b []byte
  a = []byte("a")
  b = []byte("A")
  fmt.Println(bytes.EqualFold(a,b))
}           

複制

位元組bytes的操作大全

image.png

7.将切片按照空格分割成多個子切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("ab  c d")
  var list [][]byte
  list = bytes.Fields(a)
  fmt.Println(list)
}           

複制

位元組bytes的操作大全

image.png

8.将切片按照指定的規則分割成多個子切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("a=b&c=d&f==e")
  var list [][]byte
  var f = func (s rune) bool{
    if(s=='&'){
      return true
    }
    return false
  }
  list = bytes.FieldsFunc(a,f)
  fmt.Printf("count:%d,%q",len(list),list)
}           

複制

位元組bytes的操作大全

image.png

9.位元組切片是否包含字首字元切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-abcdef")
  var b = []byte("xj")
  fmt.Println(bytes.HasPrefix(a,b))
}           

複制

位元組bytes的操作大全

image.png

字元切片是否包含字尾切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-abcdef")
  var b = []byte("ef")
  fmt.Println(bytes.HasSuffix(a,b))
}           

複制

位元組bytes的操作大全

image.png

11.擷取第一個子切片所在的位置index

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-abcdef")
  var b = []byte("ef")
  fmt.Println(bytes.Index(a,b))
}           

複制

位元組bytes的操作大全

image.png

12.擷取切片b中任意一個Unicode編碼字元第一次出現在切片a中的位置

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-我abcdef")
  var b = "efghe"
  fmt.Println(bytes.IndexAny(a,b))
}           

複制

位元組bytes的操作大全

image.png

13.擷取字元b 第一次出現在切片a中的位置

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-我abcdef")
  var b = byte('e')
  fmt.Println(bytes.IndexByte(a,b))
}           

複制

位元組bytes的操作大全

image.png

傳回第一個滿足規則的unicode編碼字元b,在切片a中的位置

package main

import (

"bytes"

"fmt"

)

func main() {

var a = []byte("xj-我愛abcdef")

var f = func(r rune)bool{

return r > rune('我')

}

fmt.Println(bytes.IndexFunc(a,f))

}

位元組bytes的操作大全

image.png

15.傳回uncode編碼第一次出現在切片a中的位置

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj-我愛abcdef")
  var f = rune('我')
  fmt.Println(bytes.IndexRune(a,f))
}           

複制

位元組bytes的操作大全

image.png

16.将多個切片通過字元連接配接成一個大的切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj")
  var b = []byte("-abc")
  var s = bytes.Join([][]byte{a,b},[]byte("&"))
  fmt.Printf("%q",s)
}           

複制

位元組bytes的操作大全

image.png

17.傳回切片b最後一次出現在切片a的索引

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xj")
  var b = []byte("-abc")
  var lastIndex = bytes.LastIndex(a,b)
  fmt.Println(lastIndex)
}           

複制

未找到則傳回-1

位元組bytes的操作大全

image.png

18.傳回字元切片b中任意字元,最後一次出現在切片a中的位置

package main
import (
  "bytes"
  "fmt"
)
func main() {
  var a = []byte("xjaaaa")
  var b = "bcdefa"
  var lastIndex = bytes.LastIndexAny(a,b)
  fmt.Println(lastIndex)
}           

複制

位元組bytes的操作大全

image.png

19.傳回字元b最後一次出現在切片a中的位置

package main

import (
  "bytes"
  "fmt"
)

func main() {
  var a = []byte("xjaaaa")
  var b = byte('a')
  var lastIndex = bytes.LastIndexByte(a,b)
  fmt.Println(lastIndex)
}           

複制

位元組bytes的操作大全

image.png

20.傳回指定規則下,傳回字元最後出現在切片a中的位置

package main

import (
  "bytes"
  "fmt"
)
func main() {
  var a = []byte("123456f")
  var f = func (r rune)bool{
    return r == rune('f')
  }
  var lastIndex = bytes.LastIndexFunc(a,f)
  fmt.Println(lastIndex)
}           

複制

位元組bytes的操作大全

image.png

21.map方法處理數組資料

func Map(mapping func(r rune) rune, s []byte) []

package main

import (
  "bytes"
  "fmt"
  "strconv"
)

func main() {
  var a = []byte("123456")
  var f = func (r rune)rune{
    s := string(r)
    num,err := strconv.Atoi(s)
    if(err != nil){
      fmt.Println(err)
      return rune(-1)
    }
    if(num > 5){
      return rune(-1)
    }
   return r
  }
  result := bytes.Map(f,a)
  
  fmt.Println(string(result))
}           

複制

位元組bytes的操作大全

image.png

Map 根據映射函數傳回位元組切片s的所有字元修改後的副本。如果映射傳回負值,則字元将從字元串中删除而不會被替換。 s 和輸出中的字元被解釋為 UTF-8 編碼的 Unicode 代碼點

22.将字元切片,重複n此組成新的切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  fmt.Printf("%s\n", bytes.Repeat([]byte("abc"),3))
}           

複制

位元組bytes的操作大全

image.png

23.用新的切片,替換切片a中的子切片的資料,替換n次

package main

import (
  "bytes"
  "fmt"
)

func main() {
  fmt.Printf("%s\n", bytes.Replace([]byte("121416"),[]byte("1"),[]byte("a"),2))
}           

複制

位元組bytes的操作大全

image.png

24.将utf-8的字元切片轉換為rune切片

package main

import (
  "bytes"
  "fmt"
)

func main() {
  s := []byte("121416我")
  r := bytes.Runes(s)
  fmt.Printf("%d,%d\n",len(s),len(r))
}           

複制

位元組bytes的操作大全

image.png

25.将切片按照字元切片b分割成多個子切片數組,不包含切片b

package main

import (
  "bytes"
  "fmt"
)

func main() {
  fmt.Printf("%s",bytes.Split([]byte("abcdef"),[]byte("d")))
}           

複制

位元組bytes的操作大全

image.png

26.将切片按照字元切片b分割成多個子切片數組,包含切片b

  • 27.将切片按照字元切片b分割成n個子切片數組,如果數量達到n則不在繼續分割
  • 28.切片字元中,按照空格劃分成字元串,首字元設定大寫
  • 29.切片全部轉換為小寫
  • 30.切片全部轉換為小寫
  • 31.從左邊開始切割字元切片s中出現的字元切片b,傳回剩餘的資料
  • 32.從右邊開始切割字元切片s中出現的字元切片b,傳回剩餘的資料