golang標(biāo)準(zhǔn)庫中提供了bytes包,該包幾乎和strings包給string提供的功能,只不過bytes包對應(yīng)的是[]byte簿姨。和strings一樣痢甘,并不修改傳入變量喇嘱,而是返回其副本修改之后的內(nèi)容。
整個包分為以下幾種操作:轉(zhuǎn)換塞栅、比較者铜、去除、分割放椰、查找作烟、替換
一、轉(zhuǎn)換
將s的副本中所有字符修改成大寫(小寫)砾医,然后返回
func ToUpper(s []byte) []byte // 全部轉(zhuǎn)大寫
func ToLower(s []byte) []byte // 全部轉(zhuǎn)小寫
func ToTitle(s []byte) []byte // 全部轉(zhuǎn)大寫
使用指定的映射表將對s的副本中的所有字符進(jìn)行修改拿撩,然后返回
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參數(shù)相當(dāng)于[]byte{},
a < b 返回-1
a == b 返回0
a > b 返回1
func Compare(a, b []byte) int
判斷a错邦、b是否相等探赫,nil參數(shù)相當(dāng)[]byte{}。
func Equal(a, b []byte) bool
判斷s撬呢、t是否相似伦吠,忽略大寫、小寫、標(biāo)題三種格式的區(qū)別讨勤。
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函數(shù)中返回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函數(shù)以sep為分隔符將s的副本切割分成多個子串潭千,結(jié)果不包含分隔符谱姓。
如果sep為空,則將s的副本分割成Unicode字符列表刨晴。
SplitN可以指定分割次數(shù)屉来,超出n的部分將不進(jìn)行分割,n小于0狈癞,表示分割所有茄靠。
func Split(s, sep []byte) [][]byte
func SplitN(s, sep []byte, n int) [][]byte
功能同Spelit,只不過結(jié)果包含分隔符(在各個子串尾部)
func SplitAfter(s, sep []byte) [][]byte
func SplitAfterN(s, sep []byte, n int) [][]byte
以連續(xù)空白為分隔符將s的副本分隔成多個子串蝶桶,結(jié)果不包含分隔符慨绳。
func Fields(s []byte) [][]byte
以符合f的字符為分隔符將s的副本分割成多個子串,結(jié)果不包含分割符真竖。
func FieldsFunc(s []byte, f func(rune) bool) [][]byte
以sep為連接符脐雪,將子串列表s的副本連接成一個字節(jié)串。
func Join(s [][]byte, sep []byte) []byte
將子串b重復(fù)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(字節(jié)c、字符r)在s中第一次出現(xiàn)的位置讨韭,找不到則返回-1脂信。
func Index(s, sep []byte) int
func IndexByte(s []byte, c byte) int
func IndexRune(s []byte, r rune) int
查找chars中的任何一個字符在s中第一次出現(xiàn)的位置,找不到則返回-1透硝。
func IndexAny(s []byte, chars strings) int
查找符合f的字符在s中第一次出現(xiàn)的位置狰闪,找不到則返回-1。
func IndexFunc(s []byte, f func(r rune) bool) int
功能同上濒生,只不過查找最后一次出現(xiàn)的位置尝哆。
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中出現(xiàn)的次數(shù)
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返回負(fù)值规阀,則丟棄該字符。
func Map(mapping func(r rune) rune, s []byte) []byte
將s副本轉(zhuǎn)換為[]rune類型返回
func Runes(s []byte) []rune
<h3>type Reader</h3>
將切片b封裝成bytes.Reader對象
func NewReader(b []byte) *Reader
bytes.Reader實現(xiàn)了如下接口:
1)io.ReadeSeeker
2)io.ReaderAt
3)io.WriterTo
4)io.ByteScanner
5)io.RuneScanner
// 返回未讀取部分的數(shù)據(jù)長度
func (r *Reader) Len() int
// 返回底層數(shù)據(jù)的總長度瘦麸,方便ReadAt使用谁撼,返回值不變。
func (r *Reader) Size() int64
type Buffer struct {...}
將buf包裝成bytes.Buffer對象。
func NewBuffer(buf []byte) *Buffer
轉(zhuǎn)化成bytes.Buffer對象
func NewBufferString(s string) *Buffer
Buffer是一個緩存厉碟,沒有底層數(shù)據(jù)喊巍,緩存的容量會根據(jù)需要自動調(diào)整。大多數(shù)情況下箍鼓,使用new(Buffer)就足以初始化一個Buffer了崭参。
bytes.Buffer實現(xiàn)了如下接口:
1)io.ReadWrite
2)io.ReaderFrom
3)io.WriterTo
4)io.ByteWriter
5)io.ByteScanner
6)io.RuneScanner
未讀取部分的數(shù)據(jù)長度
func (b *Buffer) Len() int
緩存的容量
func (b *Buffer) Cap() int
讀取前n字節(jié)的數(shù)據(jù)并以切片形式返回,如果數(shù)據(jù)長度小于n款咖,則全部讀取何暮。切片只在下一次讀寫操作前合法。
func (b *Buffer) Next(n int) []byte
讀取第一個delim及其之前的內(nèi)容铐殃,返回遇到的錯誤(一般是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編碼,返回寫入的字節(jié)數(shù)和error富腊。
保留err是為了匹配bufio.Write的WriteRune
func (b *Buffer) WriteRune(r rune) (n int, err error)
寫入s坏逢,返回寫入的字節(jié)數(shù)和error。
func (b *Buffer) WriteString(s string) (n int, err error)
引用未讀取部分的數(shù)據(jù)部分的數(shù)據(jù)切片(不移動讀取位置)
func (b *Buffer) Bytes() []byte
返回未讀取部分的數(shù)據(jù)字符串(不移動讀取位置)
func (b *Buffer) String() string
自動增加緩存容量赘被,以保證有n字節(jié)的剩余空間是整。
如果n小于0或無法增加則會panic。
func (b *Buffer) Grow(n int)
將數(shù)據(jù)長度截短到n字節(jié)帘腹,如果n小于0或大于Cap則panic贰盗。
func (b *Buffer) Teuncate(n int)
重設(shè)緩沖區(qū),清空所有數(shù)據(jù)(包括初始內(nèi)容)阳欲。
func (b *Buffer) Reset
轉(zhuǎn)載自:http://www.reibang.com/p/bc7baa8bb286