golang中的bytes包
golang標準庫中提供了bytes包,該包幾乎和strings包給string提供的功能,只不過bytes包對應的是[]byte。和strings一樣,並不修改傳入變數,而是返回其副本修改之後的內容。
整個包分為以下幾種操作:轉換、比較、去除、分割、查詢、替換
一、轉換
將s的副本中所有字元修改成大寫(小寫),然後返回
func ToUpper(s []byte) []byte // 全部轉大寫
func ToLower(s []byte) []byte // 全部轉小寫
func ToTitle(s []byte) []byte // 全部轉大寫
使用指定的對映表將對s的副本中的所有字元進行修改,然後返回
func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte
func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte
func ToTitleSpecial(_case unicode.SpecialCase, s []byte)
將s的副本中的所有單詞的首字元修改為Title格式返回。
func Title(s []byte) []byte
二、比較
比較兩個[]byte,nil引數相當於[]byte{},
a < b 返回-1 a == b 返回0 a > b 返回1 func Compare(a, b []byte) int
判斷a、b是否相等,nil引數相當[]byte{}。
func Equal(a, b []byte) bool
判斷s、t是否相似,忽略大寫、小寫、標題三種格式的區別。
func EqualFold(s, t []byte) bool
三、去除
去除s的副本左右包含cutset中的字元(返回s的副本)
func Trim(s []byte, cutset string) []byte
func TrimLeft(s []byte, cutset string) []byte
func TrimRight(s []byte, cutset string) []byte
去掉s副本的左右邊中f函式中返回true的字元
func TrimFunc(s []byte, f func(r rune) bool) []byte
func TrimLeftFunc(s []byte, f func(r rune) boo) []byte
func TrimRightFunc(s []byte, f func(r rune) bool) []byte
去除s副本兩邊的空白(unicode.IsSpace)
func TrimSpace(s []byte) []byte
去掉s副本的字首prefix(字尾suffix)
func TrimPrefix(s, prefix []byte) []byte
func TrimSuffix(s, suffix []byte) []byte
四、分割
Split函式以sep為分隔符將s的副本切割分成多個子串,結果不包含分隔符。
如果sep為空,則將s的副本分割成Unicode字元列表。
SplitN可以指定分割次數,超出n的部分將不進行分割,n小於0,表示分割所有。
func Split(s, sep []byte) [][]byte
func SplitN(s, sep []byte, n int) [][]byte
功能同Spelit,只不過結果包含分隔符(在各個子串尾部)
func SplitAfter(s, sep []byte) [][]byte
func SplitAfterN(s, sep []byte, n int) [][]byte
以連續空白為分隔符將s的副本分隔成多個子串,結果不包含分隔符。
func Fields(s []byte) [][]byte
以符合f的字元為分隔符將s的副本分割成多個子串,結果不包含分割符。
func FieldsFunc(s []byte, f func(rune) bool) [][]byte
以sep為連線符,將子串列表s的副本連線成一個位元組串。
func Join(s [][]byte, sep []byte) []byte
將子串b重複count次後返回。
func Repeat(b []byte, count int) []byte
五、查詢
判斷s是否有字首prefix(字尾suffix)
func HasPrefix(s, prefix []byte) bool
func HasSuffix(s, suffix []byte) bool
判斷b中是否包含子串subslice(字元r)
func Contains(b, subslice []byte) bool
func ContainsRune(b []byte, r rune) bool
判斷b中是否包含chars中的任何一個字元
func ContainsAny(b []byte, chars string) bool
查詢子串sep(位元組c、字元r)在s中第一次出現的位置,找不到則返回-1。
func Index(s, sep []byte) int
func IndexByte(s []byte, c byte) int
func IndexRune(s []byte, r rune) int
查詢chars中的任何一個字元在s中第一次出現的位置,找不到則返回-1。
func IndexAny(s []byte, chars strings) int
查詢符合f的字元在s中第一次出現的位置,找不到則返回-1。
func IndexFunc(s []byte, f func(r rune) bool) int
功能同上,只不過查詢最後一次出現的位置。
func LastIndex(s, sep []byte) int
func LastIndexByte(s []byte, c byte) int
func LastIndexAny(s []byte, chars string) int
func LastIndexFunc(s []byte, f func(r rune) bool) int
獲取sep在s中出現的次數
func Count(s, sep []byte) int
六、替換
將s副本中的前n個old替換為new,n<0則替換全部。
func Replace(s, old, new []byte, n int) []byte
將s副本中字元替換為mapping(r)的返回值,如果mapping返回負值,則丟棄該字元。
func Map(mapping func(r rune) rune, s []byte) []byte
將s副本轉換為[]rune型別返回
func Runes(s []byte) []rune
type Reader
將切片b封裝成bytes.Reader物件
func NewReader(b []byte) *Reader
bytes.Reader實現瞭如下介面:
1)io.ReadeSeeker
2)io.ReaderAt
3)io.WriterTo
4)io.ByteScanner
5)io.RuneScanner
// 返回未讀取部分的資料長度
func (r *Reader) Len() int
// 返回底層資料的總長度,方便ReadAt使用,返回值不變。
func (r *Reader) Size() int64
type Buffer struct {...}
將buf包裝成bytes.Buffer物件。
func NewBuffer(buf []byte) *Buffer
轉化成bytes.Buffer物件
func NewBufferString(s string) *Buffer
Buffer是一個快取,沒有底層資料,快取的容量會根據需要自動調整。大多數情況下,使用new(Buffer)就足以初始化一個Buffer了。
bytes.Buffer實現瞭如下介面:
1)io.ReadWrite
2)io.ReaderFrom
3)io.WriterTo
4)io.ByteWriter
5)io.ByteScanner
6)io.RuneScanner
未讀取部分的資料長度
func (b *Buffer) Len() int
快取的容量
func (b *Buffer) Cap() int
讀取前n位元組的資料並以切片形式返回,如果資料長度小於n,則全部讀取。切片只在下一次讀寫操作前合法。
func (b *Buffer) Next(n int) []byte
讀取第一個delim及其之前的內容,返回遇到的錯誤(一般是io.EOF)。
func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
func (b *Buffer) ReadString(delim byte) (line string, err error)
寫入r的UTF-8編碼,返回寫入的位元組數和error。
保留err是為了匹配bufio.Write的WriteRune
func (b *Buffer) WriteRune(r rune) (n int, err error)
寫入s,返回寫入的位元組數和error。
func (b *Buffer) WriteString(s string) (n int, err error)
引用未讀取部分的資料部分的資料切片(不移動讀取位置)
func (b *Buffer) Bytes() []byte
返回未讀取部分的資料字串(不移動讀取位置)
func (b *Buffer) String() string
自動增加快取容量,以保證有n位元組的剩餘空間。
如果n小於0或無法增加則會panic。
func (b *Buffer) Grow(n int)
將資料長度截短到n位元組,如果n小於0或大於Cap則panic。
func (b *Buffer) Teuncate(n int)
重設緩衝區,清空所有資料(包括初始內容)。
func (b *Buffer) Reset