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, "完满教育"))
}
/*
3
1
1
*/
- 字符数量
统计字符串的字符数量可以用两种方法:第一种是使用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()方法
}
/*
7
7
*/
一般来说,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;完满主任
*/
有疑问加站长微信联系(非本文作者)