Go语言中的字符串处理方法示例详解
1概述
字符串,string,一串固定长度的字符连接起来的字符集合。Go语言的字符串是使用UTF-8编码的。UTF-8是Unicode的实现方式之一。
Go语言原生支持字符串。使用双引号("")或反引号(``)定义。
双引号:"",用于单行字符串。
反引号:``,用于定义多行字符串,内部会原样解析。
示例:
//单行
"心有猛虎,细嗅蔷薇"
//多行
`
大风歌
大风起兮云飞扬。
威加海内兮归故乡。
安得猛士兮守四方!
`
字符串支持转义字符,列表如下:
- \r回车符(返回行首)
- \n换行符(直接跳到下一行的同列位置)
- \t制表符
- \'单引号
- \"双引号
- \\反斜杠
- \uXXXXUnicode字符码值转义,例如"\u5eb7"就是"康"
Go语言中字符串的顶层结构是由一个指针和长度构成的。使用unsafe.Sizeof("")会得到16长度,其中8个字节是指针,指向字符串的内存地址,8个是存储字符串的长度。
2常规操作
以下是针对字符串的操作总结,主要来自于Go语言的API的说明和测试。
[]索引访问
可以使用[index]方式,访问到字符串中的字符。可以访问,不可以修改。
s:="Hank"
fmt.Printf("%c",s[2])
//返回n
unicode/utf8包
多字节字符的处理,请参考unicode/utf8包的相关说明。
例如:
import"unicode/utf8" utf8.RuneCountInString("小韩说课") //返回4
len(),字符串占用的字节数
utf-8是变长字符集,英文标点占用1个字节,中文占用3个字节。
len("Hank康")
//返回7
+,字符串连接"
"Hello"+""+"Hank"
==,>,<
字符串比较,比较机制是字符的对称比较。
"abc">"bbcd" //结果为false
strings.Compare(a,bstring)int
字符串比较,比较机制是字符的对称比较。返回值为:
0,表示a==b
-1,表示a 1,表示a>b
strings.Compare("abc","abcd")
//返回1
strings.Contains(s,substrstring)bool
检测字符串substr是否在s中。
strings.Contains("foobar","foo") //返回true strings.Contains("fobar","foo") //返回false
strings.ContainsAny(s,charsstring)bool
检测字符串chars的中任意字符是否出现在s中。
fmt.Println(strings.ContainsAny("Hank","kang")) //返回true fmt.Println(strings.ContainsAny("Hank","go")) //返回false
strings.ContainsRune(sstring,rrune)bool
检测rune字符是否出现在s中。
strings.ContainsRune("Hank",'a') //返回true strings.ContainsRune("Hank",97) //返回true,a的码值97
strings.Count(s,substrstring)int
统计字符串s中非重叠substr的数量。若统计空字符串"",会返回s的长度加1。
strings.Count("HanZhongKang","n") //返回3 strings.Count("Hank","") //返回5,"Hank"每个rune的前后都算
strings.EqualFold(s,tstring)bool
检测字符串s和t在忽略大小写的情况下是否相等。
strings.EqualFold("Hank","hank") //返回true
strings.Fields(sstring)[]string
返回使用空格分割的字符串s,结果为切片。
strings.Fields("HanZhongKang") //返回[]string,["Han","Zhong","Kang"]
strings.FieldsFunc(sstring,ffunc(rune)bool)[]string
使用函数确定分隔符,来分割字符串s。结果是切片。
//,|/都是分隔符 fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.FieldsFunc("go,python,c++/c,Js|JavaScript",fn) //返回["go""python""c++""c""Js""JavaScript"]
strings.HasPrefix(s,prefixstring)bool
检测字符串s是否以字符串prefix作为前缀。
strings.HasPrefix("Gopher","Go") //返回true
strings.HasSuffix(s,suffixstring)bool
检测字符串s是否以字符串suffix作为后缀。
strings.HasSuffix("Gopher","er") //返回true
strings.Index(s,substrstring)int
返回字符串substr在字符串s中第一次出现的索引位置,若没有出现,返回-1。
strings.Index("Gopher","ph") //返回2
strings.IndexAny(s,charsstring)int
返回字符串chars中的任意字符在字符串s中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexAny("Gopher","lmno") //返回1
strings.IndexByte(sstring,cbyte)int
返回byte字符c在字符串s中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexByte("Gopher",'h') //返回3
strings.IndexFunc(sstring,ffunc(rune)bool)int
返回字符串s中第一次满足函数f的rune字符的索引位置,若没有出现,返回-1。
fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.IndexFunc("go,python,c++/c,Js|JavaScript",fn) //返回2
strings.IndexRune(sstring,rrune)int
返回run字符r在字符串s中第一次出现的索引位置,若没有出现,返回-1。
strings.IndexRune("小韩说课",'说') //返回6
strings.Join(a[]string,sepstring)string
使用分隔符sep连接字符串切片a。
ss:=[]string{"Go","Hank","Python","PHP"} strings.Join(ss,"-") //返回"Go-Hank-Python-PHP"
strings.LastIndex(s,substrstring)int
返回字符串substr在字符串s中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndex("Hankang","an") //返回4
strings.LastIndexAny(s,charsstring)int
返回字符串chars中的任意字符在字符串s中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndexAny("Hankang","lmno") //返回5
strings.LastIndexByte(sstring,cbyte)int
返回byte字符c在字符串s中最后一次出现的索引位置,若没有出现,返回-1。
strings.LastIndexByte("Hankang",'n') //返回5
strings.LastIndexFunc(sstring,ffunc(rune)bool)int
返回字符串s中字后一次满足函数f的rune字符的索引位置,若没有出现,返回-1。
fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.LastIndexFunc("go,Js|JavaScript",fn) //返回5
strings.Map(mappingfunc(rune)rune,sstring)string
返回字符串s中的每个字符经过映射函数mapping处理之后的字符串。
fn:=func(crune)rune{ ifstrings.ContainsRune(",|/",c){ return'-' }else{ returnc } } strings.Map(fn,"go,Js|JavaScript") //返回"go-Js-JavaScript"
strings.Repeat(sstring,countint)string
返回将字符串s重复count的字符串。
strings.Repeat("la~",3) //返回值"la~la~la~"
strings.Replace(s,old,newstring,nint)string
在字符串s中使用字符串new替换字符串old,使用n限定替换次数,n设置为负数表示没有限制。返回替换结果。
strings.Replace("hanzhongkang","n","N",2) //返回"haNzhoNgkang"
strings.Split(s,sepstring)[]string
使用分隔符sep分割字符串s,返回字符串切片
strings.Split("go-Js-JavaScript","-") //返回["go","Js","JavaScript"]
strings.SplitAfter(s,sepstring)[]string
在分隔符sep后分割字符串s,返回字符串切片
strings.SplitAfter("go-Js-JavaScript","-") //返回["go-","Js-","JavaScript"]
strings.SplitAfterN(s,sepstring,nint)[]string
在分隔符sep后分割字符串s,使用n限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。
strings.SplitAfterN("go-Js-JavaScript","-",2) //返回["go-","Js-JavaScript"]
strings.SplitN(s,sepstring,nint)[]string
在分隔符sep分割字符串s,使用n限定分割的元素数量,n<0全部子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。
strings.SplitN("go-Js-JavaScript","-",2) //返回["go","Js-JavaScript"]
strings.Title(sstring)string
返回Title化的字符串。
strings.Title("helloHank'sgo") //返回"HelloHank'sGo"
strings.ToLower(sstring)string
转换字符串s到小写。
strings.ToLower("Hank'sGoGuide") //返回"hank'sgoguide"
strings.ToLowerSpecial(cunicode.SpecialCase,sstring)string
使用特定的规则转换字符串s到小写。
strings.ToLowerSpecial(unicode.TurkishCase,"Önnekİş") //返回önnekiş
strings.ToTitle(sstring)string
返回全部字符都Title化的字符串。
strings.Title("helloHank'sgo") //返回"HELLOHANK'SGO"
strings.ToTitleSpecial(cunicode.SpecialCase,sstring)string
使用特定的规则将全部字符都Title化。
strings.ToTitleSpecial(unicode.TurkishCase,"dünyanınilkborsayapısıAizonaikabuledilir") //返回"DÜNYANINİLKBORSAYAPISIAİZONAİKABULEDİLİR"
strings.ToUpper(sstring)string
将字符串s中所有字符转换为大写。
strings.ToUpper("helloHank'sgo") //返回"HELLOHANK'SGO"
strings.ToUpperSpecial(cunicode.SpecialCase,sstring)string
使用特定的规则将字符串s中所有字符转换为大写。
strings.ToUpperSpecial(unicode.TurkishCase,"örnekiş") //返回"ÖRNEKİŞ"
strings.Trim(sstring,cutsetstring)string
截取字符串s两端包裹的特定字符集cutset。
strings.Trim("username","") //返回"username"
strings.TrimFunc(sstring,ffunc(rune)bool)string
截取字符串s两端满足函数f的字符。
fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.TrimFunc("|/username,/",fn) //返回"username"
strings.TrimLeft(sstring,cutsetstring)string
截取字符串s左边包裹的特定字符集cutset。
strings.TrimLeft("username","") //返回"username"
strings.TrimLeftFunc(sstring,ffunc(rune)bool)string
截取字符串s左边满足函数f的字符。
fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.TrimLeftFunc("|/username,/",fn) //返回"username,/"
strings.TrimPrefix(s,prefixstring)string
截取字符串s的前缀prefix。
strings.TrimPrefix("hank_goGuide","hank_") //返回"goGuide"
strings.TrimRight(sstring,cutsetstring)string
截取字符串s右边包裹的特定字符集cutset。
strings.TrimRight("username","") //返回"username"
strings.TrimRightFunc(sstring,ffunc(rune)bool)string
截取字符串s右边满足函数f的字符。
fn:=func(crune)bool{ returnstrings.ContainsRune(",|/",c) } strings.TrimRightFunc("|/username,/",fn) //返回"|/username"
strings.TrimSpace(sstring)string
截取字符串s两端的空白字符。
strings.TrimSpace("\t\nHello,Gophers\n\t\r\n") //返回"Hello,Gophers"
strings.TrimSuffix(s,suffixstring)string
截取字符串s的后缀suffix。
strings.TrimSuffix("goGuide_beta","_beta") //返回"goGuide"
总结
以上所述是小编给大家介绍的Go语言中的字符串处理方法示例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!