查看: 0|回复: 0

Go语言中的字符串处理方法示例详解 [复制链接]

匿名  发表于 2020-10-4 17:18:07

Go语言中的字符串处理方法示例详解

1 概述


字符串,string,一串固定长度[attitudes]的字符连接起来的字符集合。Go语言的字符串是使用UTF-8编码的。UTF-8是Unicode的实现方式之一。


Go语言原生支持[zhī chí]字符串。使用双引号("")或反引号(``)定义。


双引号:"", 用于单行字符串。


反引号:``,用于定义多行字符串,内部会原样解析。


示例:



// 单行

"心有猛虎,细嗅蔷薇"

// 多行

`

大风歌

大风起兮云飞扬。

威加海内兮归故乡。

安得猛士兮守四方!

`



字符串支持[zhī chí]转义字符,列表如下:



      

  • 回车符(返回行首)

  •   

  • 换行符(直接跳到下一行的同列位置[wèi zhi]

  •   
  •          制表符

  •   
  • " 单引号

  •   
  • " 双引号

  •   
  • \ 反斜杠

  •   
  • uXXXX Unicode字符码值转义,例如 "u5eb7" 就是 "康"


Go语言中字符串的顶层结构是由一个指针和长度[attitudes]构成的。使用 unsafe.Sizeof("") 会得到16长度[attitudes],其中8个字节是指针,指向字符串的内存地址,8个是存储字符串的长度[attitudes]


2 常规操作


以下是针对字符串的操作总结,主要[main]来自于Go语言的API的说明和测试。


[]索引访问[fǎng wèn]


可以[ kě yǐ]使用[index]方式,访问[fǎng wèn]到字符串中的字符。可以[ kě yǐ]访问[fǎng wèn],不可以[ kě yǐ]修改。



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, b string) int


字符串比较,比较机制是字符的对称比较。返回值为:



0,表示a == b

-1,表示a < b

1,表示a > b

strings.Compare("abc", "abcd")

// 返回 1



strings.Contains(s, substr string) bool


检测字符串 substr 是否在 s 中。




strings.Contains("foobar", "foo")
// 返回 true
strings.Contains("fobar", "foo")
// 返回 false




strings.ContainsAny(s, chars string) bool


检测字符串 chars 的中任意字符是否出现[chū xiàn]在 s 中。




fmt.Println(strings.ContainsAny("Hank", "kang"))
// 返回 true
fmt.Println(strings.ContainsAny("Hank", "go"))
// 返回 false




strings.ContainsRune(s string, r rune) bool


检测 rune字符是否出现[chū xiàn]在 s 中。




strings.ContainsRune("Hank", "a")
// 返回 true
strings.ContainsRune("Hank", 97)
// 返回 true,a的码值97




strings.Count(s, substr string) int


统计字符串 s 中非重叠substr的数量。若统计空字符串"",会返回 s 的长度[attitudes]加1。




strings.Count("HanZhongKang", "n")
// 返回 3
strings.Count("Hank", "")
// 返回 5,"Hank"每个rune的前后都算




strings.EqualFold(s, t string) bool


检测字符串 s 和 t 在忽略大小写的情况下是否相等。




strings.EqualFold("Hank", "hank")
// 返回 true




strings.Fields(s string) []string


返回使用空格分割的字符串 s,结果为切片。




strings.Fields("Han Zhong Kang")
// 返回 []string, ["Han", "Zhong", "Kang"]




strings.FieldsFunc(s string, f func(rune) bool) []string


使用函数确定分隔符,来分割字符串 s。结果是切片。




// ,|/ 都是[All are]分隔符
fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.FieldsFunc("go,python,c++/c,Js|JavaScript", fn)
// 返回 ["go" "python" "c++" "c" "Js" "JavaScript"]




strings.HasPrefix(s, prefix string) bool


检测字符串 s 是否以字符串 prefix 作为前缀。




strings.HasPrefix("Gopher", "Go")
// 返回 true




strings.HasSuffix(s, suffix string) bool


检测字符串 s 是否以字符串 suffix 作为后缀。




strings.HasSuffix("Gopher", "er")
// 返回 true




strings.Index(s, substr string) int


返回字符串 substr 在字符串 s 中第一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.Index("Gopher", "ph")
// 返回 2




strings.IndexAny(s, chars string) int


返回字符串 chars 中的任意字符在字符串 s 中第一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.IndexAny("Gopher", "lmno")
// 返回 1




strings.IndexByte(s string, c byte) int


返回byte字符 c 在字符串 s 中第一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.IndexByte("Gopher", "h")
// 返回 3


strings.IndexFunc(s string, f func(rune) bool) int


返回字符串 s 中第一次[Once]满足[mǎn zú]函数 f 的rune字符的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.IndexFunc("go,python,c++/c,Js|JavaScript", fn)
// 返回 2




strings.IndexRune(s string, r rune) int


返回run字符 r 在字符串 s 中第一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.IndexRune("小韩说课", "说")
// 返回 6


strings.Join(a []string, sep string) string


使用分隔符 sep 连接字符串切片 a。




ss := []string{"Go", "Hank", "python", "pHP"}
strings.Join(ss, "-")
// 返回 "Go-Hank-Python-PHP"




strings.LastIndex(s, substr string) int


返回字符串 substr 在字符串 s 中最后一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.LastIndex("Hankang", "an")
// 返回 4


strings.LastIndexAny(s, chars string) int


返回字符串 chars 中的任意字符在字符串 s 中最后一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.LastIndexAny("Hankang", "lmno")
// 返回 5




strings.LastIndexByte(s string, c byte) int


返回byte字符 c 在字符串 s 中最后一次[Once]出现[chū xiàn]的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




strings.LastIndexByte("Hankang", "n")
// 返回 5


strings.LastIndexFunc(s string, f func(rune) bool) int


返回字符串 s 中字后一次[Once]满足[mǎn zú]函数 f 的rune字符的索引位置[wèi zhi],若没有出现[chū xiàn],返回-1。




fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.LastIndexFunc("go,Js|JavaScript", fn)
// 返回 5


strings.Map(mapping func(rune) rune, s string) string


返回字符串 s 中的每个字符经过映射函数 mapping 处理之后的字符串。




fn := func(c rune) rune {
if strings.ContainsRune(",|/", c) {
  return "-"
} else {
  return c
}
}
strings.Map(fn, "go,Js|JavaScript")
// 返回 "go-Js-JavaScript"




strings.Repeat(s string, count int) string


返回将字符串 s 重复 count 的字符串。




strings.Repeat("la~", 3)
// 返回值 "la~la~la~"




strings.Replace(s, old, new string, n int) string


在字符串 s 中使用字符串 new 替换字符串 old,使用 n 限定替换次数,n设置为负数表示没有限制。返回替换结果。




strings.Replace("han zhong kang", "n", "N", 2)
// 返回 "haN zhoNg kang"


strings.Split(s, sep string) []string


使用分隔符 sep 分割字符串 s,返回字符串切片




strings.Split("go-Js-JavaScript", "-")
// 返回 ["go", "Js", "JavaScript"]




strings.SplitAfter(s, sep string) []string


在分隔符 sep 后分割字符串 s,返回字符串切片




strings.SplitAfter("go-Js-JavaScript", "-")
// 返回 ["go-", "Js-", "JavaScript"]




strings.SplitAfterN(s, sep string, n int) []string


在分隔符 sep 后分割字符串 s,使用 n 限定分割的元素数量,n<0全部[all]子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。




strings.SplitAfterN("go-Js-JavaScript", "-", 2)
// 返回 ["go-", "Js-JavaScript"]




strings.SplitN(s, sep string, n int) []string


在分隔符 sep 分割字符串 s,使用 n 限定分割的元素数量,n<0全部[all]子字符串,n>0最后一个子字符串包含余下内容,n==0返回nil。返回子字符串切片。




strings.SplitN("go-Js-JavaScript", "-", 2)
// 返回 ["go", "Js-JavaScript"]




strings.Title(s string) string


返回Title化的字符串。




strings.Title("hello Hank"s go")
// 返回 "Hello Hank"s Go"




strings.ToLower(s string) string


转换字符串 s 到小写。




strings.ToLower("Hank"s Go Guide")
// 返回 "hank"s go guide"




strings.ToLowerSpecial(c unicode.SpecialCase, s string) string


使用特定的规则[guī zé]转换字符串 s 到小写。




strings.ToLowerSpecial(unicode.TurkishCase, "Önnek İş")
// 返回 önnek iş




strings.ToTitle(s string) string


返回全部[all]字符都Title化的字符串。




strings.Title("hello Hank"s go")
// 返回 "HELLO HANK"S GO"




strings.ToTitleSpecial(c unicode.SpecialCase, s string) string


使用特定的规则[guī zé]全部[all]字符都Title化。




strings.ToTitleSpecial(unicode.TurkishCase, "dünyanın ilk borsa yapısı Aizonai kabul edilir")
// 返回 "DÜNYANIN İLK BORSA YAPISI AİZONAİ KABUL EDİLİR"


strings.ToUpper(s string) string


将字符串 s 中所有[all]字符转换为大写。




strings.ToUpper("hello Hank"s go")
// 返回 "HELLO HANK"S GO"


strings.ToUpperSpecial(c unicode.SpecialCase, s string) string


使用特定的规则[guī zé]将字符串 s 中所有[all]字符转换为大写。




strings.ToUpperSpecial(unicode.TurkishCase, "örnek iş")
// 返回 "ÖRNEK İŞ"


strings.Trim(s string, cutset string) string


截取字符串 s 两端包裹的特定字符集 cutset。




strings.Trim(" user name  ", " ")
// 返回 "user name"




strings.TrimFunc(s string, f func(rune) bool) string


截取字符串 s 两端满足[mǎn zú]函数 f 的字符。




fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimFunc("|/user name,/", fn)
// 返回 "user name"


strings.TrimLeft(s string, cutset string) string


截取字符串 s 左边包裹的特定字符集 cutset。




strings.TrimLeft(" user name  ", " ")
// 返回 "user name  "




strings.TrimLeftFunc(s string, f func(rune) bool) string


截取字符串 s 左边满足[mǎn zú]函数 f 的字符。




fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimLeftFunc("|/user name,/", fn)
// 返回 "user name,/"


strings.TrimPrefix(s, prefix string) string


截取字符串 s 的前缀 prefix。




strings.TrimPrefix("hank_goGuide", "hank_")
// 返回 "goGuide"




strings.TrimRight(s string, cutset string) string


截取字符串 s 右边包裹的特定字符集 cutset。




strings.TrimRight(" user name  ", " ")
// 返回 " user name"


strings.TrimRightFunc(s string, f func(rune) bool) string


截取字符串 s 右边满足[mǎn zú]函数 f 的字符。




fn := func(c rune) bool {
return strings.ContainsRune(",|/", c)
}
strings.TrimRightFunc("|/user name,/", fn)
// 返回 "|/user name"


strings.TrimSpace(s string) string


截取字符串 s 两端的空白字符。




strings.TrimSpace("        
Hello, Gophers
       
")
// 返回 "Hello, Gophers"


strings.TrimSuffix(s, suffix string) string


截取字符串 s 的后缀 suffix。




strings.TrimSuffix("goGuide_beta", "_beta")
// 返回 "goGuide"


总结


以上所述是小编给大家介绍的Go语言中的字符串处理方法示例详解,希望[hope]对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感[sense]谢大家对游艇出租网站的支持[zhī chí]



厦门集美石鼓路美食,南宁市江南区租房,下载电影网站推荐,合肥的舞蹈培训学校,三极片电影在线观看,伦理电影达达兔影视,权志龙3d电影票北京,3gp手机电影下载,超好听英文dj慢摇,高仿手表劳斯丹顿,欧盾手表官网,淘宝联盟5.3,南宁公租房信息网,美女dj慢摇热舞网,张店今日天气预报,360儿童手表电池,深圳民办学校要不要租赁合同,泸州化妆师培训学校,烟台历史天气预报查询,电影天堂_电影下载_高清首发,bt电影下载,中蜂蜂王选择,北京地铁运时间表,沈阳浑南今日天气预报详情,天津翔宇国际学校图片,耽美小说古代生子文,东宫电视剧免费观,高清电影bt下载,写在成都美食的文章,迅雷电影下载,免费完本玄幻小说阅读,卡西欧手表参数,人妖男扮女装过程视频,环保主题动漫图片,咸阳市环保局官网首页,武汉一年四季天气,好看的腐女小说网,nba全明星新秀赛,最新电影免费下载,狗狗 高清电影,2018中文车载dj粤语视频,考研热门专业,怎么看电流表电压表测什么,胡2006北海舰队,上海大学附属中学实验学校初中,mp4电影下载80s,好看的言情有声小说,免费小说试婚王妃,2018东莞公职位表,电影天堂迅雷下载,女装男装品牌代理加盟,温州天气预报40天查询,北京房山天气预报40天,滨州实验学校招聘信息,依波表705324,南宁2月天气预报,河南卫视昨天晚上节目表,淘宝买了怎么投诉卖家,生化危机6电影下载,盲道神马电影,2014年休假安排日历表,家庭太阳能发电装备价格,广州环保展2019,大唐情史演员表,欧美嘉手表价格图片,车贴环保标志,考美术哪些学校比较好,七八美食网,白蛇传说电影下载,天龙 毒蜂在哪,成都十一历年天气,沈今日天气预报,北海道大学函馆校区,老上海牌机械手表价格,环保督察回头看黑龙江,环境景观设计毕业论文,秋装新款女装外套2018,韩语元辅音字母表,下载黄色电影,南宁第三职业技术学校招生简章,
█闻██老残游记██殊██仰██简██鳖██乔██肩██竹子██劳██文中子██雁██法██肥██曹操██崖██姿██柳树██床██击█

1.你看到的,就是最真的我,一种永无止尽的感动,感动这世界有你与我这最美的存在。
2.旺旺吠财,狗年福来
3.非学无以广才,非志无以成学。——诸葛亮
4.陪你痴狂千世,陪我万世轮回。 
5.其实我没那么坚强,只是我知道,不管我再怎么的去妥协,再怎么的好,再怎么改变,你也不会在回到我身边,我努力的不让自己成为你爱情的乞求者,仅此而已。你却以为我很坚强。
6.人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己
7.谁占有法律语言谁就占有相关的资源和利益。布迪厄
8.爱也不可能随心所欲,面对残忍的现实,它有着太多的无奈,即使面对一份难能可贵的旷世真爱,也只能忍着痛放手,落下的是一地的遗憾,回忆成了仅存的温暖。因为,你再强大也抗拒不了命运的力量!
9.小时候刚学加减时小时候刚学加减时,算目都是要扳着手指,有时手指不够用,就会默默的脱下鞋子。。
10.妻子身材不错,天热时,从无袖衫露肩装到吊带裙,当她准备穿露背装时,老公:你是不是应该征得我的同意?起码给我留一点好不好? 
11.^o^我不是太阳,不能在每一天把最早的温暖送给你,但我却可以用最朴实的方法为你送去最真挚的问候,那就是做第一个给你发祝福短信的人:早安快乐。

█闻██老残游记██殊██仰██简██鳖██乔██肩██竹子██劳██文中子██雁██法██肥██曹操██崖██姿██柳树██床██击█
转载请保留:http://www.discuz.kim/discuz-119773-1-1.html|点击下载本文Word文档



返回顶部

Discuz!

论坛,【www.discuz.link】
本站是 Discuz! 论坛社区产品的官方交流站点。
提供风格、模板、插件、产品扩展、技术支持等全方位服务。
Discuz! 论坛(BBS),是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台,
是全球市场占有率第一的社区论坛(BBS)软件。描述来自官方;
Copyright (C) 2001-2020 www.discuz.link, All rights reserved.

Powered by Discuz! X3.4 请勿发布违反法律法规的言论,会员观点不代表本站立场!
底部导航:Archiver|手机版| dz论坛