go语言中关于字符串使用的总结


go语言中关于字符串使用的总结

文章插图
 
Go语言标准库中对于字符串的操作很完善,以下简单总结一下字符串的操作
一、字符串只能用双引号定义
二、go里单引号和双引号不通过,可以使用`` 号来定义原始输出,不会进行转义,相当于Python 里的三引号
package mainimport "fmt"func main() { name := "杨彦星n" s := `杨 adgfgfg nt ` fmt.Println(name,s)}输出
杨彦星杨 adgfgfg nt三、字符串是不可改变的
我们说字符串是不可变的指的是字符串内部?用指针指向 UTF-8 字节数组,所指向的字节数组不能单独改变 。并不是指字符串指向一个新的UTF-8数组
package mainimport "fmt"func main() { var name string var name1 = []byte("yangyanxing汉字") name = string(name1) fmt.Println(&name,name) name = "杨彦星" //这个是可以的 fmt.Println(&name) //name 的地址不会改变 //非法 //name[0] = "a"}【go语言中关于字符串使用的总结】如果想要改变字符串中的值需要先将字符串转为字节数组([]byte)或者字符数组([]rune),有中文的情况下使用字符数组
package mainimport "fmt"func main() { var name = "yangyanxing" fmt.Println(&name,name) names := []byte(name) //字节数组需要使用单引号,双引号是字符串了 names[0] = 'f'fmt.Println(&name,string(names)) name = "杨彦星" //这个是可以的 //如果有汉字的话需要使用字符数组 namer := []rune(name) //需要使用单引号 namer[0] = '饭' //name 的地址不会改变 fmt.Println(&name,string(namer)) }四、字符串与字节数组与字符数组的相互转换
package mainimport "fmt"func main() { var name = "yangyanxing" fmt.Println(&name,name) names := []byte(name) fmt.Printf("%Tn",names) names[0] = 'f' //字节数组需要使用单引号,双引号是字符串了 name = string(names) fmt.Println(&name,name) name = "杨彦星" //如果有汉字的话需要使用字符数组 namer := []rune(name) fmt.Printf("%Tn",namer) namer[0] = '饭' name = string(namer) fmt.Println(&name,name) //name 的地址不会改变}五、字符串的遍历
字符串可以按字节或者字符来遍历
package mainimport "fmt"func main() { var name = "yang杨彦星" //按字节遍历 for i:=0;i<len(name);i++{ fmt.Printf("%v %T:%vn",i,name[i],name[i]) } fmt.Println("") //按字符遍历 for _,r := range name{ //%c 为输出数值所表示的 Unicode 字符,不带单引号 如 y //%q 输出数值所表示的 Unicode 字符(带单引号)如 '杨' fmt.Printf("%c",r) }}结果为
0 uint8:1211 uint8:972 uint8:1103 uint8:1034 uint8:2305 uint8:1576 uint8:1687 uint8:2298 uint8:1899 uint8:16610 uint8:23011 uint8:15212 uint8:159yang杨彦星Process finished with exit code 0六、字符串的拼接
可以直接使用 + 拼接
package mainimport "fmt"func main() { //字符串可以使用+进行拼接 var name = "yang" + "yan" + "xing" fmt.Println(name) //使用+=在原字符串后面追加字符串 name += "杨彦星" fmt.Println(name) // + 不能在行首,只能写在行尾,就和if else中的else那样 s := "BeiJing" + " TongZhou" fmt.Println(s)}在循环中使用 + 号进行拼接并不是高效的方法,可以使用strings.Join方法
package mainimport ( "fmt" "strings")func main() { var names = []string{"yang","fan","zhang","li","chen"} n := strings.Join(names," ") fmt.Println(n) s := "yang&aaa&bbb&ccc" //以&分割 str := strings.Split(s,"&") fmt.Println(str)}结果
yang fan zhang li chen[yang aaa bbb ccc]strings包的常用方法
该包提供了字符串操作的常用方法
package mainimport ( "fmt" "strings")func main() { s := "yang& yan&xing" //HasPrefix 判断字符串 s 是否以 prefix 开头 fmt.Println(strings.HasPrefix(s,"y")) //HasSuffix 判断字符串 s 是否以 suffix 结尾 fmt.Println(strings.HasSuffix(s,"aaa")) //Contains 判断字符串 s 是否包含 substr fmt.Println(strings.Contains(s,"yang")) //Replace替换字符串,最后一个参数为数量,-1为替换全部 fmt.Println(strings.Replace(s,"y","Y",-1)) //ToLower 将字符串中的 Unicode 字符全部转换为相应的小写字符 ss := "AAA杨彦星BbbbB" fmt.Println(strings.ToLower(ss)) //ToUpper 将字符串中的 Unicode 字符全部转换为相应的大写字符 fmt.Println(strings.ToUpper(ss)) //strings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号 //中间的不能删除 sp := " aaa bbb ccc " fmt.Println(strings.TrimSpace(sp)) //还可以去除开头或者结尾指定的字符 ssp := "aaa Hey, how are you George?aaaa" fmt.Println(strings.TrimLeft(ssp,"He")) fmt.Println(strings.TrimRight(ssp,"ge")) fmt.Println(strings.Trim(ssp,"aaa")) //strings.Fields(s) 将会利用 //strings.Split(s, sep) 用于自定义分割符号来对指定字符串进行分割 sp2 := " aa a b bb ccc " fmt.Println(strings.Fields(sp2)) fmt.Println(strings.Split(sp2," ")) //使用空格分割 //Join 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串 sp3 := []string{"aa","a","b","bb","ccc"} fmt.Println(strings.Join(sp3,"%%%"))}


推荐阅读