Golang-bytes包分析



根据 字符在在码表中的顺序从第一个字节进行比较如果第一个字节相同比较下一个直到出现两个在码表中顺序不同的两个字符
如果这是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(bytes.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   "))))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值