您的位置:首页 > 编程语言 > Go语言

Golang-bytes包分析

2014-06-18 15:45 302 查看
根据 字符在在码表中的顺序从第一个字节进行比较如果第一个字节相同比较下一个直到出现两个在码表中顺序不同的两个字符

如果这是a>b则返回1 b>a返回-1 如果每个字符比较到最后都是相等的name 返回1

func Compare(a, b []byte) int  

返回sep在s中重复出现的次数

func Count(s, sep []byte) int

返回b 是否包含 subslice

func Contains(b, subslice []byte) bool

判断a和b是否相等

func Equal(a, b []byte) bool

判断s和t是否相等  忽略大小写  还会转换特殊字符

func EqualFold(s, t []byte) bool

以空白符为分隔符将[]byte 分割为多个[]byte数组比如 []byte("wujunbin wujunbin wjunbin") --> 

[[119 117 106 117 110 98 105 110] [119 117 106 117 110 98 105 110] [119 117 106 117 110 98 105 110]] 

func Fields(s []byte) [][]byte

通过函数f判断当前传入的rune是否可以作为分隔符 如果可以返回true 不可以就返回false

func FieldsFunc(s []byte, f func(rune) bool) [][]byte

示例

fmt.Println(bytes.FieldsFunc([]byte("吴-俊=滨"),func(r rune) bool{
if r == '-' || r == '='{
return true
} else {
return false
}
}))

输出结果

[[229 144 180] [228 191 138] [230 187 168]]

判断prefix 是否是 s的前缀  是返回true 否则返回false

func HasPrefix(s, prefix []byte) bool

和HasPrefix一样  但这个是判断后缀的

func HasSuffix(s, suffix []byte) bool

返回sep在s第一次出现的位置  如果不存在返回-1

func Index(s, sep []byte) int

返回 chars在s中第一次出现的位置  如果不存在返回-1

func IndexAny(s []byte, chars string) int

返回 c在s中第一次出现的位置  如果不存在返回-1

func IndexByte(s []byte, c byte) int

返回 c在s中第一次出现的位置  如果不存在返回-1

func IndexRune(s []byte, r rune) int

自定义函数作为来筛选 所需字符在s中的索引 f返回false代表不满足继续如果返回true代表满足返回true

并且不会继续寻找 直接返回当前所在索引

func IndexFunc(s []byte, f func(r rune) bool) int

将s中的每一个[]byte 以 sep为连接符连接起来返回一个 []byte

func Join(s [][]byte, sep []byte) []byte

示例

bbs := [][]byte{ []byte("wujunbin"), []byte("wujunbin")}
fmt.Println(string(bytes.Join(bbs, []byte("-") )))

返回 c在s中最后一次出现的位置  如果不存在返回-1

func LastIndex(s, sep []byte) int

返回 chars在s中最后一次出现的位置  如果不存在返回-1

func LastIndexAny(s []byte, chars string) int

//功能和IndexFunc一样 只不过这个是从后往前进行判断

func LastIndexFunc(s []byte, f func(r rune) bool) int

//将count个b组合在一个[]byte中

func Repeat(b []byte, count int) []byte

通过mapping 将传进来的r进行自定义的操作 返回一个自己想要返回的rune值 加入到字符串中

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

示例

fmt.Println(string(bytes.Map(func(r rune) rune {
if r == '-' {
r = 0
}
return r
}, []byte("wu-ju-nb-in"))))

输出结果 wujunbin

其中 rune 如果设置值为0 做字符串处理式相当于一个空字符传或空字符

将[]byte转换为[]rune

func Runes(s []byte) []rune

示例 以下两种写法都可以讲 []byte转换为[]rune 只不过 bytes做了封装

fmt.Println([]rune(string([]byte("吴俊滨"))))

fmt.Println(bytes.Runes(([]byte("吴俊滨"))))

用new替代s中的old 通过n指定替代的个数并返回最终替代后的结果 如果n<0那么 s中所有出现的old将全被替代

func Replace(s, old, new []byte, n int) []byte

比如 s中有两个 old  如果 n为1 则只会将第一个old替代为new

示例

fmt.Println(string(bytes.Replace([]byte("wujunjunbin"),[]byte("jun"),[]byte("bin"),1)))

输出结果  wubinjunbin

以sep为分隔符 将s分割 返回的每个[]byte 不包含分隔符

func Split(s, sep []byte) [][]byte

以sep为分隔符 将s分割 返回的每个[]byte 包含分隔符

func SplitAfter(s, sep []byte) [][]byte

以sep为分隔符 将s分割 n代表 切分为几段 

n <0 全部返回 

n ==0 返回一个空的[][]byte

n>0 返回n个[]byte 也就是[][]byte中有n个[]byte  当然最大值不超过 实际可切分的段数

func SplitAfterN(s, sep []byte, n int) [][]byte

func SplitN(s, sep []byte, n int) [][]byte //不包含分隔符

示例
fmt.Println(
string(bytes.SplitAfterN([]byte("wu-jun-bin"),[]byte("-"),2)[0]),
)
fmt.Println(
string(bytes.SplitAfterN([]byte("wu-jun-bin"),[]byte("-"),2)[1]),
)

输出结果
wu-
jun-bin

返回s的拷贝  并且这个拷贝的首个字母是大写  --- 有一些BUG 如果首字符是标点符号 

func Title(s []byte) []byte

将所有字符小写后返回

func ToLower(s []byte) []byte

将所有字符大写后返回 

func ToUpper(s []byte) []byte

将所有字符大写后返回  大部分情况下和uppet是一样的 但有可能一些其他语种的语言会不一样

注意 Title格式 不同于  Upper格式 只是在英文中没区别而已

func ToTitle(s []byte) []byte

切割掉s开头和结尾的cutset字符串并返回

func Trim(s []byte, cutset string) []byte

切割掉s开头的cutset字符串并返回

func TrimLeft(s []byte, cutset string) []byte

切割掉s结尾的cutset字符串并返回

func TrimRight(s []byte, cutset string) []byte

根据函数判断当前字符是否应该割除  返回true表示割除 继续扫描下一个 返回false代表不割除停止扫面

头部和尾部都会扫描 先扫描头部 如果头部扫描完之后全部割除了那么就不会继续尾部了

func TrimFunc(s []byte, f func(r rune) bool) []byte

只扫描头步 和 TrimFunc同理

func TrimLeftFunc(s []byte, f func(r rune) bool) []byte

只扫描尾部 和TrimFunc同理

func TrimRightFunc(s []byte, f func(r rune) bool) []byte

示例如下

fmt.Println(string(bytes.TrimFunc([]byte("awusafaddda"), func(r rune) bool {
fmt.Println(string(r))
if r != 'd' {
return true
} else {
return false
}
})))

取出s的prefix前缀  如果没有该前缀 则不做改变

func TrimPrefix(s, prefix []byte) []byte

取出s的prefix后缀  如果没有该前缀 则不做改变

func TrimSuffix(s, suffix []byte) []byte

割除s头部和尾部的空格
func TrimSpace(s []byte) []byte 

下面是实验测试时的代码

var a, b []byte = []byte{'c', 'c', 'z'}, []byte{'c', 'b', 'a'}
fmt.Println(int('b'))

fmt.Println(bytes.Compare(a, b))
fmt.Println(byte
4000
s.Count(a, []byte("cz")))
fmt.Println(bytes.Contains(a, []byte("czc")))

fmt.Println(bytes.EqualFold([]byte("WUJUNBIN"), []byte("wujunbin")))
fmt.Println(bytes.Fields([]byte("wujunbin wujunbin wujunbin")))

fmt.Println(bytes.FieldsFunc([]byte("吴-俊=滨"), func(r rune) bool {
fmt.Println(string(r))
if r == '-' || r == '=' {
return true
} else {
return false
}
}))

fmt.Println(bytes.HasPrefix([]byte("http://www.baidu.com"), []byte("s")))

fmt.Println(bytes.Index([]byte("wujunbin"), []byte("n")))

fmt.Println(bytes.IndexAny([]byte("wujunbin"), "jun"))

fmt.Println(bytes.IndexByte([]byte("wujunbin"), byte('b')))
fmt.Println(bytes.IndexRune([]byte("wujunbin"), rune('w')))

fmt.Println(bytes.IndexFunc([]byte("wujunbin"), func(r rune) bool {
if r == 'i' || r == 'n' {
return true
} else {
return false
}

}))

bbs := [][]byte{ []byte("wujunbin"), []byte("wujunbin")}
fmt.Println(string(bytes.Join(bbs, []byte("-"))))

fmt.Println(bytes.LastIndex([]byte("wujunbin"), []byte("n")))

fmt.Println(bytes.LastIndexFunc([]byte("wujunbin"), func(r rune) bool {
fmt.Println(string(r))
if r == 'i' || r == 'w' {
return true
} else {
return false
}

}))

fmt.Println(string(bytes.Repeat([]byte("w"), 5)))

fmt.Println(string(bytes.Map(func(r rune) rune {
if r == '-' {
r = 0
}
return r
}, []byte("wu-ju-nb-in"))))

fmt.Println([]rune(string([]byte("吴俊滨"))))
fmt.Println(bytes.Runes(([]byte("吴俊滨"))))

fmt.Println(string(bytes.Replace([]byte("wujunjunbin"),[]byte("jun"),[]byte("bin"),1)))

fmt.Println((bytes.Split([]byte("wu-jun-bin"),[]byte("-"))))
fmt.Println((bytes.SplitAfter([]byte("wu-jun-bin"),[]byte("-"))))

fmt.Println(
(bytes.SplitAfterN([]byte("wu-jun-bin"),[]byte("-"),0)),
)
fmt.Println(
string(bytes.SplitAfterN([]byte("wu-jun-bin"),[]byte("-"),2)[0]),
)
fmt.Println(
string(bytes.SplitAfterN([]byte("wu-jun-bin"),[]byte("-"),2)[1]),
)

fmt.Println(string(bytes.ToLower([]byte("WUJUnidskjfakU"))))
fmt.Println(string(bytes.ToTitle([]byte("ujunbisad吴fasfsd"))))
fmt.Println(string(bytes.ToUpper([]byte("wwerewrwerwrwerwe"))))

fmt.Println(string(bytes.Title([]byte("吴wujunbin"))))

fmt.Println(string(bytes.Trim([]byte("a wusa f a d d d d d a"),"a")))
fmt.Println(string(bytes.TrimLeft([]byte("a wusa f a d d d d d a"),"a")))
fmt.Println(string(bytes.TrimFunc([]byte("awusafaddda"), func(r rune) bool {
fmt.Println(string(r))
if r != 'd' {
return true
} else {
return false
}
})))

fmt.Println(string(bytes.TrimPrefix([]byte("http://www.baidu.com"),[]byte("http://"))))

fmt.Println(string(bytes.TrimSpace([]byte(" fssd df "))))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: