strings包
Go语言标准库中也存在这样一个名为strings包,额外封装一些方法用于处理字符串。
包含判断
- 前后缀包含
func main() { //前后缀包含 var str string = "This is a fat cat" var str1 string = "Hello Boss!" var str2 string = "Lucy is name My" fmt.Printf("T/F? Does the string \"%s\" have prefix %s?\n", str, "is") //str的前缀是否包含"is"? fmt.Printf("%t\n", strings.HasPrefix(str, "is")) //使用HasPrefix方法判断前缀 fmt.Printf("T/F Does the string \"%s\" have prefix %s?\n", str1, "He") fmt.Printf("%t\n", strings.HasPrefix(str1, "He")) fmt.Printf("T/F Does the string \"%s\" have prefix %s?\n", str2, "My") //str2的后缀是否包含"y" fmt.Printf("%t\n,", strings.HasSuffix(str2, "My")) //使用HasSuffix方法判断后缀}
- 子字符串包含关系
除了可以检查前后缀,还可以使用Contains方法判断一个字符串的中间是否包含指定子字符串。
func main() { //使用ContainsAny方法查询字符串是否包含多个字符, fmt.Println(strings.ContainsAny("team", "e")) //true fmt.Println(strings.ContainsAny("chain", "")) //false fmt.Println(strings.ContainsAny("name", "n & m")) //true //使用Contains方法查找某个字符串是否存在这个字符串中,若存在,返回true fmt.Println(strings.Contains("team", "t & a")) //false fmt.Println(strings.Contains("chain", "")) //true fmt.Println(strings.Contains("name", "n & m")) //false}
与strings.Contains(str, chars)不同的是,strings.ContainsAny(str, chars)能够匹配更广泛的内容,它可以匹配Unicode字符串。
索引
strings包中的Index可以返回指定字符/串的第一个字符的索引值,如果不存在相应的字符串则返回-1。
func main() { str := "Hello, I'm Job, Yep" str1 := "我是完满主任" fmt.Printf("The position of \"Job\" is: ") fmt.Printf("%d\n", strings.Index(str, "Job")) //使用Index方法返回str的第一个字符"Hello"的索引值8。 fmt.Printf("The position of the last instance of \"Hi\" is: ") fmt.Printf("%d\n", strings.LastIndex(str, "Yep")) //使用LastIndex方法返回str的最后一个字符"Yep"出现的索引位置13。 fmt.Printf("The position of \"Tim\" is: ") fmt.Printf("%d\n", strings.Index(str, "Tiger")) //不存在相应的字符串,返回-1 //适用于非ASCII编码的字符,使用strings.IndexRune()对字符进行定位 fmt.Printf("The position of \"满\" is: ") fmt.Printf("%d\n", strings.IndexRune(str1, '满')) //一个中文占用3字节长度,第三个字符'满'的索引值是9。}
替换
在Go语言中,经常使用strings.Replace函数对字符串进行处理。
func main() { str := "我是钓鱼城大学的老王!" //原字符串 new := "完满主任" //替换的新内容 old := "老王" //被替换的字符串 n := 1 //表示替换到第n个old println(strings.Replace(str, old, new, n)) //使用Replace函数替换字符串}/*我是钓鱼城大学的完满主任!*/
strings.Replace(str, old, new, n)是函数一共有四个参数,str是原字符串,new是需要替换的内容,old是被替换的字符串,n表示匹配到第n个old。如果n等于-1,则表示匹配所有。
统计
- 出现频率
在strings包中,可以借助strings.Count(str, manyO)统计字符串出现的频率。
func main() { str := "Golang is cool, right?" str1 := "科学建设钓鱼城特色的完满教育!" var manyG string = "o" //使用strings.Count()统计的字符串出现频率 fmt.Printf("%d\n", strings.Count(str, manyG)) fmt.Printf("%d\n", strings.Count(str, "oo")) fmt.Printf("%d\n", strings.Count(str1, "完满教育"))}/* 311*/
- 字符数量
统计字符串的字符数量可以用两种方法:第一种是使用len([]rune(str)),先把字符串通过[]rune转化,然后再调用len()统计字符串长度。第二种则是通过utf8包中的RuneCountInString函数统计。
func main() { str := "一起玩嘛?主任" fmt.Printf("%d\n", len([]rune(str))) //使用len([]rune())方法 fmt.Println(utf8.RuneCountInString(str)) //使用RuneCountInString()方法}/*77*/
一般来说,Go语言官方更推荐第二种统计方式,但如果只是单纯统计,就没有必要引入utf8包,只需要使用第一种方式即可。以下是代码演示。
大小写转换
使用ToLower将字符串中的Unicode字符全部转换为相应的小写字符
使用ToUpper将字符串中的Unicode字符全部转换为相应的大写字符
func main() { str := "Hello World!\n" fmt.Printf("%s", str) fmt.Printf(strings.ToLower(str)) //使用ToLower将字符串全部转换成小写 fmt.Printf(strings.ToUpper(str)) //使用ToUpper将字符串全部转换成大写}/*Hello World!hello world!HELLO WORLD!*/
修剪
使用strings.Trim()函数对字符串去掉一些不必要的内容,这一过程被称为修剪。
func main() { str := "完满 Hello Go 完满" str1 := " 请使用TrimSpace()修剪空白字符 " fmt.Println(str) fmt.Printf("%q\n", strings.Trim(str, "完满")) //修剪前缀和后缀 fmt.Printf("%q\n", strings.Trim(str, "完满 ")) fmt.Printf("%q\n", strings.TrimLeft(str, "完满 ")) //修剪左边前缀的字符 fmt.Printf("%q\n", strings.TrimRight(str, " 完满")) //修剪右边后缀的字符 fmt.Printf("%q\n", strings.TrimSpace(str1)) //修剪前缀和后缀的空白字符}/* 完满 Hello Go 完满 " Hello Go " "Hello Go" "Hello Go 完满" "完满 Hello Go" "请使用TrimSpace()修剪空白字符"*/
分割
使用分割函数strings.Split(),函数返回的是一个切片(slice)。切片的形式是用 [ ] 括起来,在后续的复合数据类型中将会进一步学习切片的使用。
func main() { str := "This is Golang Project" fmt.Println(str) fmt.Printf("%q\n", strings.Split(str, "Project")) //分割指定字符 fmt.Printf("%q\n", strings.Split(str, " ")) //分割空白字符}/*This is Golang Project["This is Golang " ""]["This" "is" "Golang" "Project"]*/
插入字符
strings.Fields函数用于将字符串转换成slice(切片),strings.Join则将类型为string的切片使用分隔符组成拼接组成一个字符串。
func main() { str := "What's your name 完满主任" strFli := strings.Fields(str) //将原字符串转换成切片类型 fmt.Println(str) fmt.Println(strFli) for _, val := range strFli { //range关键字的用法,需补充.... fmt.Printf("%s", val) } fmt.Println() str2 := strings.Join(strFli, ";") //用分号拼接字符串 fmt.Printf("%s\n", str2)}/*What's your name 完满主任[What's your name 完满主任]What'syourname完满主任What's;your;name;完满主任*/
文章来源:智云一二三科技
文章标题:Golang 标准库:strings 包的应用
文章地址:https://www.zhihuclub.com/3582.shtml