bytes包提供了对字节切片进行读写操作的一系列函数

字节切片处理的函数比較多,分为基本处理函数,比較函数,后缀检查函数,索引函数,切割函数,

大写和小写处理函数和子切片处理函数等.

1.字节切片基本处理函数api

1.1Contains()函数

//Contains()函数的功能是检查字节切片b是否包括子切片subslice,假设包括返回true,否则返回false.
func Contains(b,subslice []bytes) bool

1.2Count()函数

//Count()函数的功能是计算字节切片sep在字节切片s中非重叠显示的个数.
func Count(s,sep[]byte) int

1.3Repeat()函数

//Repeat()函数的功能是把切片b复制count个,然后合成一个新的字节切片返回.
func Repeat(b[]byte,count int) []byte

1.4Replace()函数

/*Replace()函数的功能是返回字节切片s的一个副本,并把前n个不重叠的
子切片old替换为new;假设n<0,则不限制替换的数量.參数n为替换的次数*/
func Replace(s,old,new []byte,n int) []byte

1.5Runes()函数

//Runes()函数的功能是把s转换为UTF-8编码的字节序列,并返回相应的Unicode切片.
func Runes(s []byte) []rune

1.6Join()函数

Join函数的功能是用字节切片sep把s中的每一个字节切片连成一个字节切片并返回.
func Join(s [][]byte,sep[]byte) []byte

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//Contains
b := []byte("mChenys") //字符串强转为byte切片
sublice1 := []byte("m")
sublice2 := []byte("M")
fmt.Println(bytes.Contains(b,sublice1))//true
fmt.Println(bytes.Contains(b,sublice2))//false //Count
s := []byte("hahaahaaa")
sep1 := []byte("hah")
sep2 := []byte("aa")
sep3 := []byte("a")
fmt.Println(bytes.Count(s,sep1))//1
fmt.Println(bytes.Count(s,sep2))//2
fmt.Println(bytes.Count(s,sep3))//6 //Repeat
b = []byte("ha")
fmt.Println(string(bytes.Repeat(b,1)))//ha
fmt.Println(string(bytes.Repeat(b,2)))//haha //Replace
s = []byte("hello,world")
old := []byte("o")
news := []byte("ee")
fmt.Println(string(bytes.Replace(s,old,news,0)))//hello,world
fmt.Println(string(bytes.Replace(s,old,news,1)))//hellee,world
fmt.Println(string(bytes.Replace(s,old,news,2)))//hellee,weerld
fmt.Println(string(bytes.Replace(s,old,news,-1)))//hellee,weerld //Runes
s = []byte("你好世界")
r := bytes.Runes(s)
fmt.Println("转换前字符串的长度: ",len(s))//12
fmt.Println("转换后字符串的长度: ",len(r))//4 //Join
s := [][]byte{[]byte("你好"),[]byte("世界")}
sep1 := []byte(",")
fmt.Println(string(bytes.Join(s,sep1)))//你好,世界
sep2 := []byte("#")
fmt.Println(string(bytes.Join(s,sep2)))//你好#世界
}

2.字节切片比較函数

2.1Compare()函数

/*Compare()函数的功能是依据字节的值比較字节切片a和b的大小,假设a=b,返回0,
假设a>b返回1,假设a<b返回-1.*/
func Compare(a,b[]byte) int

2.2Equal()函数

/*Equal()函数的功能是用来比較2个字节切片是否相等,假设參数为nil,则等同于
空的字节切片,假设a=b,则返回true,否则返回false.区分大写和小写*/
func Equal(a,b[]byte) bool

2.3EqualFold()函数

/*EqualFold()函数的功能是把s和t转换成UTF-8字符串进行比較,
而且忽略大写和小写,假设s=t,返回true,否则,返回false.*/
func EqualFold(s,t[]byte) bool

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//Compare
a := []byte("abc")
b := []byte("a")
fmt.Println(bytes.Compare(a,b))//1
b =[]byte("abcd")
fmt.Println(bytes.Compare(a,b))//-1
b =[]byte("abC")
fmt.Println(bytes.Compare(a,b))//1 小写字母大于大写字母
b =[]byte("b")
fmt.Println(bytes.Compare(a,b))//-1 从第一个字节開始比較,假设同样再比較长度 //Equal
a = []byte("abc")
b = []byte("ABC")
fmt.Println(bytes.Equal(a,b))//false
fmt.Println(bytes.Equal(a,nil))//false
b = []byte("abc")
fmt.Println(bytes.Equal(a,b))//true //EqualFold
a = []byte("abc")
b = []byte("ABC")
fmt.Println(bytes.EqualFold(a,b))//true }

3.字节切片前后缀检查

3.1HasPrefix()函数

//HasPrefix()函数的功能是检查字节切片s的前缀是否为prefix,假设是返回true,假设不是返回false.
func HasPrefix(s,prefix[]byte) bool

3.2HashSuffix()函数

//HashSuffix()函数的功能是检查字节切片s的后缀是否为suffix,假设是返回true,否则返回false.
func HashSuffix(s,suffix[]byte) bool

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//HasPrefix
s := []byte("mChenys")
prefix := []byte("m")
fmt.Println(bytes.HasPrefix(s,prefix))//true
prefix = []byte("men")
fmt.Println(bytes.HasPrefix(s,prefix))//false //HashSuffix
suffix := []byte("ys")
fmt.Println(bytes.HasSuffix(s,suffix))//true }

4.字节切片位置索引函数

字节切片位置索引函数共同拥有8个,Index(),IndexAny(),IndexByte(),IndexFunc(),IndexRune(),

LastIndex(),LastIndexAny()和LastIndexFunc().

4.1index()函数

//返回sep在s中第一次出现的位置索引(从0開始),假设sep中不在s中则返回-1.
func Index(s,sep []byte) int

4.2IndexAny()函数

/*把s解析为UTF-8编码的字节序列,返回chars中不论什么一个字符在s中第一次
出现的索引位置;假设s中不包括chars中不论什么一个字符,则返回-1.*/
func IndexAny(s []byte,chars string) int

4.3IndexByte()函数

//函数的功能是检查字节c在s中第一次出现的位置索引;假设s中不包括c则返回-1.
func IndexByte(s[]byte,c byte) int

4.4IndexFunc()函数

/*的功能是把s解析为UTF-8字节序列,并返回一个满足f(c)=true的字符c的位置
索引,假设没有满足则返回-1.*/
func IndexFunc(s[]byte,f func(r rune)bool) int

4.5IndexRune()函数

/*功能是把s解析为UTF-8字节序列,并返回rune类型的字符r在s中的位置索引,
假设s中不包括r则返回-1.*/
func IndexRune(s[]byte,r rune) int

4.6LastIndex()函数

//的功能是返回sep在s中最后一次出现的位置索引,假设s中不包括sep,则返回-1
func LastIndex(s,sep[]byte) int

4.7LastIndexAny()函数

/*的功能是把s解析为UTF-8字节序列,返回chars中不论什么一个字符在s中最后
出现的位置索引,假设chars为空或者s中不包括chars中的随意字符,则返回-1*/
func LastIndexAny(s[]byte,chars string) int

4.8LastIndexFunc()函数

/*功能是把s解析成UTF-8字节序列,返回满足f(s)=true的字符c在s中最后
一次出现的位置索引,假设没有找到则返回-1.*/
func LastIndexFunc(s[]byte,f func(r rune)bool) int

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//Index
a := []byte("aaaaa")
fmt.Println(bytes.Index(a,[]byte("a")))//0
fmt.Println(bytes.Index(a,[]byte("aa")))//0
fmt.Println(bytes.Index(a,[]byte("b")))//-1 //IndexAny
fmt.Println(bytes.IndexAny(a,"a"))//0
fmt.Println(bytes.IndexAny(a,"aa"))//0 //IndexByte
s := []byte("google")
var ch byte = 'g'
fmt.Println(bytes.IndexByte(s,ch))//0 //IndexFunc,能够接收匿名函数
fmt.Println(bytes.IndexFunc(s,func (a rune)bool{
if a == 'o'{
return true
}else{
return false
}
}))//1 //IndexRune
fmt.Println(bytes.IndexRune(s,'e'))//5
fmt.Println(bytes.IndexRune(s,'a'))//-1 //LastIndex
fmt.Println(bytes.LastIndex(s,[]byte("g")))//3
fmt.Println(bytes.LastIndex(s,[]byte("e")))//5
fmt.Println(bytes.LastIndex(s,[]byte("o")))//2 //LastIndexAny
fmt.Println(bytes.LastIndexAny(s,"gle"))//5
fmt.Println(bytes.LastIndexAny(s,"l"))//4
fmt.Println(bytes.LastIndexAny(s,"ge"))//5 //LastIndexFunc
fmt.Println(bytes.LastIndexFunc(s,func(r rune)bool{
if r=='g'{
return true
}else {
return false
}
}))//3
}

5.字节切片切割函数

字节切片切割函数共同拥有6个,Fields(),FieldsFunc(),Split(),SplitN(),

SplitAfter()和SplitAfterN()

5.1Fields()函数

/*功能是把字节切片s依照一个或者连续多个空白字符切割成多个字节切片,
假设s仅仅包括空白字符则返回空字节切片,当中參数s准备切割的字节切片.*/
func Fields(s[]byte) [][]byte wq

5.2FieldsFunc()函数

/*功能是把s解析为UTF-8字节序列,对于每一个Unicode字符c,假设f(c)
返回true就把c作为切割字符对s进行拆分.假设全部字符都满足f(c)为true,则返回空切片.*/
func FieldsFunc(s []byte,f func(r rune)bool) [][]byte

5.3Split()函数

/*功能是把s用sep切割成多个字节切片并返回,假设sep为空,Split则把s切分成
每一个字节切片相应一个UTF-8字符,Split()等效于參数为n的splitN()函数.*/
func Split(s,sep[]byte)[][]byte

5.4SplitAfter()函数

/*功能使用sep作为后缀把s切分成多个字节切片并返回。假设sep为空,
则把s切分成每一个字节切片相应一个UTF-8字符*/
func SplitAfter(s,sep[]byte)[][]byte

5.5SplitAfterN()函数

/*功能是用sep作为后缀把s切分成多个字节切片并返回。假设sep为空。则把s切分成每一个字节切片
相应一个UTF-8字符。 參数n决定返回切片的长度:假设n>0,最多返回n个子字节切片,
子切片可能包括未切分的字节序列;假设n=0。返回空切片假设n< 0返回全部子切片。*/
func SplitAfterN(s,sep[]byte,n int)[][]byte

5.6SplitN()函数

/*功能是把s用sep切割成多个字节切片并返回,假设sep为空,Split则把s
切分成每一个字节切片相应一个UTF-8字符,參数n决定返回长度,n>0最多返回那个子切片;
n==0什么都不返回,n<0返回空子切片.*/
func SplitN(s,sep []byte,n int)[][]byte

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//Fields ,返回的是2维切片
s := []byte("a b c")
for _,v := range bytes.Fields(s){
//遍历获取1维切片,再强转为字符串
fmt.Print(string(v)+",") //a,b,c,
} //FieldsFunc,返回是2维切片,接收匿名函数
for _,v := range bytes.FieldsFunc(s,func(r rune)bool{
if r == ' '{
return true //依照空白字符切割
}else{
return false
}
}){
fmt.Print(string(v)+",")//a,b,c,
} //Split
s = []byte("吃饭和睡觉")
for _,v := range bytes.Split(s,[]byte("和")){
fmt.Print(string(v)+",")//吃饭,睡觉,
}
for _,v := range bytes.Split(s,nil){
fmt.Print(string(v)+",")//吃,饭,和,睡,觉,
} //SplitAfter
s = []byte("abbcbbd")
for _,v := range bytes.SplitAfter(s,[]byte("bb")){
fmt.Print(string(v)+",")//abb,cbb,d,
}
for _,v := range bytes.SplitAfter(s,nil){
fmt.Print(string(v)+",")//a,b,b,c,b,b,d,
} //SplitAfterN
s = []byte("hehehe")
for _,v := range bytes.SplitAfterN(s,[]byte("he"),0){
fmt.Print(string(v)+",") //什么都不输出
}
for _,v := range bytes.SplitAfterN(s,[]byte("he"),1){
fmt.Print(string(v)+",")//hehehe,
}
for _,v := range bytes.SplitAfterN(s,[]byte("he"),-1){
fmt.Print(string(v)+",")//he,he,he,,
} //SplitN
s = []byte("hahaha")
for _,v := range bytes.SplitN(s,[]byte("ha"),0){
fmt.Print(string(v)+",") //什么都不输出
}
for _,v := range bytes.SplitN(s,[]byte("ha"),1){
fmt.Print(string(v)+",")//hahaha,
}
for _,v := range bytes.SplitN(s,[]byte("ha"),-1){
fmt.Print(string(v)+",")//,,,,
}
}

6.字节切片大写和小写处理

共同拥有7个函数,Title(),ToTitle(),ToTitleSpecial(),ToLower(),ToLowerSpecial(),ToUpper()

和ToUpperSpecial().

6.1Title()函数

//的功能是返回一个s的副本,把s中每一个单词的首字母改成Unicode字符大写.
func Title(s[]byte) []byte

6.2ToTitle()函数

//的功能是返回s的一个副本,并把当中全部Unicode字符转为大写.
func ToTitle(s []byte) []byte

6.3ToTitleSpecial()函数

/*功能是返回s的一个副本,并把当中全部Unicode字符依据_case指定
的规则转成大写.*/
func ToTitleSpecial(_case unicode.SpecialCase,s []byte) []byte

6.4ToLower()函数

//的功能是返回s的一个副本,并把当中的全部Unicode字符转为小写.
func ToLower(s []byte)[]byte

6.5ToLowerSpecial()函数

/*功能是返回s的一个副本,并把当中全部Unicode字符都依据_case
指定的规则转换成小写.*/
func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte

6.6ToUpper()函数

//是返回s的一个副本,并把当中全部Unicode字符都转为大写.
func ToUpper(s []byte) []byte

6.7ToUpperSpecial()函数

/*的功能是返回s的一个副本,并把当中全部Unicode字符都依据_case
指定的规则转成大写.*/
func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte
package main

import(
"fmt"
"bytes"
"unicode"
)
func main(){
s := []byte("abc")
fmt.Println(string(bytes.Title(s)))//Abc
fmt.Println(string(bytes.ToTitle(s)))//ABC
fmt.Println(string(bytes.ToTitleSpecial(unicode.AzeriCase,s)))//ABC
s = []byte("ABC")
fmt.Println(string(bytes.ToLower(s)))//abc
fmt.Println(string(bytes.ToLowerSpecial(unicode.AzeriCase,s)))//abc
s = []byte("abc")
fmt.Println(string(bytes.ToUpper(s)))//ABC
fmt.Println(string(bytes.ToUpperSpecial(unicode.AzeriCase,s)))//ABC }

7.子字节切片处理函数

共同拥有9个,Trim(),TrimFunc(),TrimLeft(),TrimLeftFunc(),TrimRight(),TrimRightFunc(),

TrimSpace(),TrimPrefix()和TrimSuffix().

7.1Trim()函数

/*的功能是返回s的子字节切片,cutset中随意出如今s的首部和尾部的
连续字符将被删除。*/
func Trim(s []byte, cutset string) []byte

7.2TrimFunc()函数

//功能是返回s的子字节切片,删除s首部和尾部连接的满足f(c)=true的字符c。
func TrimFunc(s []byte, f func(r rune) bool) []byte

7.3TrimLeft()函数

//的功能是返回s的子字节切片,cutset中随意出如今s首部的连续字符被删除。
func TrimLeft(s []byte, cutset string) []byte

7.4TrimLeftFunc()函数

//功能是返回s的一个子字节切片、删除s首部连续满足f(c)=true的字符c。
func TrimLeftFunc(s []byte, f func(r rune) bool) []byte

7.5TrimRight()函数

//的功能是返回s的子字节切片,cutset中随意出如今s尾部的连续字符被删除。
func TrimRight(s []byte, cutset string) []byte

7.6TrimRightFunc()函数

//功能是返回s的一个子字节切片、删除s尾部连续满足f(c)=true的字符c
func TrimRightFunc(s []byte, f func(r rune) bool) []byte

7.7TrimSpace()函数

/*功能是返回s的一个子字节切片。并删除s中開始和结尾处的连续的
Unicode空白字符。*/
func TrimSpace(s []byte) []byte

7.8TrimPrefix()函数

//功能是返回s的一个子字节切片,并删除前缀为prefix的部分
func TrimPrefix(s, prefix []byte) []byte

7.9TrimSuffix()函数

//功能是返回s的一个子字节切片,并删除后缀为suffix的部分
func TrimSuffix(s, suffix []byte) []byte

[实例]

package main

import(
"fmt"
"bytes"
)
func main(){
//Trim
s := []byte(" abc ")
fmt.Println(string(bytes.Trim(s," "))+"d")//abcd //TrimFunc
s = []byte("hello world")
fmt.Println(string(bytes.TrimFunc(s,func(r rune)bool{
if r=='h' || r=='d'{
return true
}else{
return false
}
}))) //ello worl s = []byte("helloh")
fmt.Println(string(bytes.TrimFunc(s,func(r rune)bool{
if r=='h' || r=='o'{
return true
}else{
return false
}
}))) //ell s = []byte("helloh")
fmt.Println(string(bytes.TrimFunc(s,func(r rune)bool{
if r=='h' && r=='o'{
return true
}else{
return false
}
}))) //helloh //TrimLeft
fmt.Println(string(bytes.TrimLeft(s,"h")))//elloh
fmt.Println(string(bytes.TrimLeft(s,"l")))//helloh //TrimLeftFunc
fmt.Println(string(bytes.TrimLeftFunc(s,func(r rune)bool{
if r == 'h' || r=='l'{
return true
}else{
return false
} }))) //elloh //TrimRight
fmt.Println(string(bytes.TrimRight(s,"oh")))//hell //TrimRightFunc
fmt.Println(string(bytes.TrimRightFunc(s,func(r rune)bool{
if r == 'h'{
return true
}else{
return false
} })))//hello //TrimSpace
s = []byte(" abc ")
fmt.Println("d"+string(bytes.TrimSpace(s))+"d")//dabcd //TrimPrefix
s = []byte("mChenys")
fmt.Println(string(bytes.TrimPrefix(s,[]byte("mC"))))//henys
fmt.Println(string(bytes.TrimPrefix(s,[]byte("en"))))//mChenys //TrimSuffix
s = []byte("mChenys")
fmt.Println(string(bytes.TrimSuffix(s,[]byte("ys"))))//mChen
fmt.Println(string(bytes.TrimSuffix(s,[]byte("en"))))//mChenys
}

Go语言学习(十)bytes包处理字节切片的更多相关文章

  1. Go语言学习之main包的讲解

    ### Go语言学习之main包的讲解 1.Go中main函数不支持任何返回值 2.可以通过os.Exit(0)来返回状态 func main(){ fmt.Println("hellow ...

  2. Go语言学习之2 包、函数、常量、数据类型、字符操作

    第一部分:基本数据类型和操作符 1. 文件名&关键字&标识符 (1)所有go源码以.go结尾    (2)标识符以字母或下划线开头,大小写敏感,比如: a. boy     b. Bo ...

  3. Dart语言学习(十二) Dart面向对象

    Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...

  4. Go语言学习笔记(六) [包]

    日期:2014年7月30日   1.定义:包时函数和数据的集合.使用package关键字定义一个包,文件名不需要与包名一致,包名约定使用小写字符,Go包可以由多个文件组成,但是需要使用相同的packa ...

  5. Dart语言学习(十) Dart流程控制语句

    一.条件语句:if.if...elseif.if...elseif...else int score = 95; if (score >=90) { print('优秀'); } else if ...

  6. Go语言学习笔记(8)——包和结构体

    包 —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点.主函数应该存在main包中. 结构体: 通过 . 操作符访问结构体的各个成员! 1. 定义结构体类型person: type per ...

  7. Dart语言学习(十五) Dart函数方法

    Dart函数方法可分为两类: 一.内置方法/函数: print(); 二.自定义方法: 自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){ 方法体 return 返回值; } vo ...

  8. Dart语言学习(十四) Dart泛型

    什么是泛型? 通俗理解:泛型就是解决 类 接口 方法的复用性.以及对不特定数据类型的支持(类型校验) 如下代码,只能返回string类型的数据 String getData(String value) ...

  9. 【Go语言学习笔记】包

    包其实是每个大型工程都会使用的模块化工具. 将相关的代码封装成一个包,给其他项目调用,提供不同的功能. GO的设计是将一个文件夹看成一个包,虽然不一定非要用文件夹的名字,但是比较建议. 同一个文件夹下 ...

随机推荐

  1. Python 极简教程(十)集合 set

    什么是集合? 集合(set)是一种可变,无序和不重复的序列. 集合是python的序列之一,集合没有列表(list).元组(tuple)和字典(ditc)常见.但是有时候也有奇效. 我们先来看个集合的 ...

  2. php高并发秒杀解决方案

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/super_runman/article/details/53037151 在秒杀.抢火车票等地方,我 ...

  3. 开发过程使用Tomcat Maven插件持续快捷部署Web项目

    我在平时工作中部署Web项目到测试服务器上的Tomcat时用的是Hudson.Hudson本身已经跟SVN.Git.Maven集成并且支持添加各种插件.但如果使用Hudson,我需要配置两个任务:一个 ...

  4. 最大似然 vs. 最小二乘

    有一篇是比较最大似然估计和最小二乘法的: http://www.cnblogs.com/hxsyl/p/5590358.html 最大似然估计:现在已经拿到了很多个样本(你的数据集中所有因变量),这些 ...

  5. Android实践 -- 设置系统日期时间和时区

    设置系统日期时间和时区 设置系统的日期时间和时区,需要 系统权限和系统签名,android:sharedUserId="android.uid.system" 需要在manifes ...

  6. 微信支付v2开发(5) 订单查询

    本文介绍微信支付中订单查询功能的实现. 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/wxpay-order-query.html 一.订单查询 因为某一方 ...

  7. 硬件——STM32 , 软件框架

    单片机应用程序的框架大概有三种: 1,简单的前后台顺序执行程序. 2,时间片轮询法. 3,应用操作系统. 下面我们主要来讲解时间片轮询法: 在这里我们先介绍一下定时器的复用功能.就是使用1个定时器,可 ...

  8. Nginx TCP代理

    nginx 在1.9.0 版本发布以前如果要想做到基于TCP的代理及负载均衡需要通过打名为nginx_tcp_proxy_module的第三方patch来实现,该模块的代码托管在github上 网址: ...

  9. 【例题 6-11 UVA-297】Quadtrees

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 发现根本不用存节点信息. 遇到了叶子节点且为黑色,就直接覆盖矩阵就好(因为是并集); [代码] #include <bits/ ...

  10. GDB中创建要素数据集

    转自 在geodatabase中创建要素集 //在数据集中创建要素 private void menuItem25_Click(object sender, System.EventArgs e) { ...