1.字符串的长度
Go语言的编码是UTF-8,在UTF-8中一个汉字占3个字节
如果字符串中包含中文,又想紧缺的计算字符串中字符的个数而不是占用的字节,那么必须先将字符串转换为rune类型的数组
package main
import "fmt"
func main(){
str1 := "lnj"
fmt.Println(len(str1)) //3
str2 := "小孟"
fmt.Println(len(str2)) //6
//byte占1个字节,只能保存字符不能保存汉字,因为一个汉字占用3个字节
arr1 := []byte(str2)
for _,v := range arr1{
fmt.Printf("%c",v)
}
//go语言中rune类型就是专门用于保存汉字
arr2 := []rune(str)
fmt.Println(len(arr2)) //6
for _,v:= range arr2{
fmt.Printf("%c",v) //小孟
}
}
2.查找子串在字符串中出现的位置
package main
import (
"fmt"
"strings"
)
func main(){
//1.查找"字符"在字符串中第一次出现的位置,找不到返回-1
res := strings.IndexByte("hello 小孟","l") //2
//2.查找汉字或字符在字符串中第一次出现的位置,找不到返回-1
res := strings.IndexRune("hello 小孟","孟")
//3.查找"汉字或字符"任意一个 在字符串中第一次出现为位置,找不到返回-1
res := strings.IndexAny("hello 小孟","wzlo") //把wzlo拆开一个字符查找找到一个就会停止
//4.查找子串第一次出现的位置,找不到返回-1
res := strings.Index("hello 小孟","llo") //llo作为一个整体
res := strings,Index("hello 小孟","孟") //可以查询字符和汉字
//5.倒序查找子串在字符串中第一次出现的位置
res := strings.LastIndex("hello 小孟","l")
//6.将字符串先转换为[]rune,然后遍历rune切片逐个取出传给自定义函数
res := strings.IndexFunc("hello 小孟",custom)
res := strings.IndexFunc("hello 小孟",func(r rune) bool{
fmt.Printf("被调用了,当前传入的是%c\n",r)
if r =='o'{
return true
}
return false
})
}
func custom(r rune) bool{
fmt.Printf("被调用了,当前传入的是%c\n",r)
if r =='o'{
return true
}
return false
}
3.判断字符串是否包含子串
package main
import "fmt"
func main(){
//1.查找子串是否存在,存在返回true,不存在返回false
res := strings.Contains("hello 小孟","llo")
//2.查找汉字或字符在字符串中是否存在
res := strins.ContinsRune("hello 小孟","孟")
//3.查找汉字或字符中任意一个在字符串中是否存在
res := strins.ContainsAny("hello 小孟","wzll")
//4.判断字符串是否以某个字符串开头
res := strings.HasPrefix("lnj-book","lnj")
//5.判断字符串是否以某个字符串结尾
res := strings.HasSuffix("lnj-book","ook")
}
4.字符串比较
package main
import(
"strings"
"fmt"
)
func main(){
//比较两个字符串的大小,会逐个字符进行比较ASCII值
res := strings.Compare("bcd","abc") //1 第一个 > 第二个
res := strings.Compare("abc","bcd") //-1 第一个 < 第二个
res := strings.Compare("bcd","bcd") //0 第一个 = 第二个
//判断两个字符是否相等,忽略大小写,可以判断字符和中文
res2 := strings.EqualFold("abc","def") //false
res2 := strings.EqualFold("abc","abc") //true
res2 := strings.EqualFold("abc","ABC") //true
res2 := strings.EqualFold("小孟","小孟") //true
}
5.字符串转换
package main
import (
"fmt"
"strings"
)
func main(){
res := strings.ToLower("ABC") //字符串转为小写
res := strings.ToUpper("abc") //字符串转为大写
res := strings.ToTitle("hello world") //转换为标题格式,都转大写
res := strings.Title("hello world") //首字母大写,其他字符不变
}
6.字符串的拆合
package main
import (
"strings"
"fmt"
)
func main(){
//按照指定字符串切割原字符串
arr1 := strings.Split("a,b,c",",")
arr2 := strings.Split("ambmc","m")
//按照指定字符串切割原字符串,并且指定切割为几份
//如果最后一个参数为0,那么会范围一个空数组
arr3 := strings.SplitN("a,b,c",",",2) //[a b,c]
arr4 := strings.SplitN("a,b,c",",",0) //[]
//按照指定字符串切割原字符串,切割是包含指定字符串
arr5 := strings.SplitAfer("a,b,c",",") //[a, b, c]
//按照指定字符串切割原在字符串,切割时包含制定个字符串,并且指定切割为几份
arr6 := strings.SplitAfterN("a,b,c",",",2) //[a, b,c]
//将字符串切片按照指定连接符号转换为字符串
sce := []string{"aa","bb","cc"}
str1 := strings.Join(sce,"_") //aa_bb_cc
//返回num个字符串串联的指定字符串
str2 := strings.Repeat("abc",2) //abcabc
//字符串的替换(需要替换的字符串 旧字符串 新字符串 替换数量)
str3 := strings.Replace("xxxmmmxm","xm","oo",-1) //xxoommoo -1表示都替换
//按照空格切割字符串,多个空格会合并为一个空格处理
arr7 := strings.Fields("a b c c d") //[a b c c d]
//将字符串转换成切片传递给函数之后由函数决定如何切割
arr8 :=strings.FieldsFunc("a,b,c",custom)
}
func custom(r rune) bool{
fmt.Print("被调用了,当前传入的是%c\n",r)
if r == ','{
return true
}
return false
}
7.字符串的清理
package main
import(
"strings"
"fmt"
)
func main(){
//去除字符串两端指定字符
str1 := strings.Trim("!!!小!!!孟!!","!") //小!!!孟
//去除字符串左端指定字符
str2 := strings.TrimLeft("!!!小!!!孟!!","!") //小!!!孟!!
//去除字符串右端指定字符
str3 := strings.TrimLeft("!!!小!!!孟!!","!") //!!!小!!!孟
//去除字符串两端的空格
str4 := strings.TrimSpace(" xiaomeng ") //xiaomeng
//取出字符串开头的指定字符
str5 := strings.TrimPrefix("xiaomeng","xia") //omeng
str6 := strings,TrimSuffix("xiaomeng","eng") //xiaom
//按照方法定义规则,去除字符串两端符合规则内容
str5 := strins.TrimFunc("!!!xiao!!!men!!!",custom)
str5 := strins.TrimLeftFunc("!!!xiao!!!men!!!",custom)
str5 := strins.TrimRightFunc("!!!xiao!!!men!!!",custom)
}
func custom(r rune) bool{
fmt.Print("被调用了,当前传入的是%c\n",r)
if r == '!'{
return true
}
return false
}