Go语言stringAPI使用 | 青训营笔记

81 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

我们从浅到深分析一下Go的string

我们先从最简单的ASCII码开始。

1.ASCII文本

 package main
 ​
 import "fmt"
 ​
 func main() {
    var s = "abc"
    //通过Println打印的是a的ASCII码
    fmt.Println(s[0])
    //通过Printf直接打印没法打印,通过类型转换可以直接输出a的字符
    fmt.Printf(string(s[0]) + "\n")
    //通过Printf打印%v输出的也是a的ASCII码
    fmt.Printf("%v\n", s[0])
    //通过Printf打印%c输出的是a的字符值
    fmt.Printf("%c\n", s[0])
    //通过range 循环遍历可以直接输出a的字符值
    for c := range s {
       fmt.Printf("%v ", c)
    }
 }

输出内容

image.png

ASCii文本访问基本没有什么问题,哪怕是我们直接获取的是ASCII码,我们也可以进行字符预算或者进行字符判断或者大小写判断。

2.中文文本

 package main
 ​
 import "fmt"
 ​
 func main() {
    var s = "测试段"
    //打印的是大于128的值
    fmt.Println(s[0])
    //输出乱码
    fmt.Printf(string(s[0]) + "\n")
    //打印的是大于128的值
    fmt.Printf("%v\n", s[0])
    //输出乱码
    fmt.Printf("%c\n", s[0])
    //输出的是字符的索引
    for c := range s {
       fmt.Printf("%v ", c)
    }
    fmt.Println()
    //输出三个字符的Unicode的十进制编码
    for _, c := range s {
       fmt.Printf("%v ", c)
    }
    fmt.Println()
    //遍历可以正确获取中文字符
    for _, c := range s {
       fmt.Printf("%c ", c)
    }
    //根据上面的内容,range遍历可以直接获取到中文字符的unicode编码
 }

输出结果

image.png

为什么会出现上面这种结果呢?主要的原因是Go是通过utf-8来储存字符,在utf-8中,中文的存储是3个字节,而数字以及字母都是一个字节,也就是8位。所以我们要把中文字符串转成int32才能正确的表示。

 package main
 ​
 import "fmt"
 ​
 func main() {
    var s = "测试段"
    copyStr := []int32(s)
    //打印的时'测'的Unicode编码10进制
    //下面是我查的'测'的unicode码
    //字符   编码10进制 编码16进制 Unicode编码10进制  Unicode编码16进制
    //测    15119755    E6B58B             27979          6D4B
    fmt.Println(copyStr[0])
    //输出字符'测'
    fmt.Printf(string(copyStr[0]) + "\n")
    //输出'测'的Unicode编码十进制
    fmt.Printf("%v\n", copyStr[0])
    //输出字符'测'
    fmt.Printf("%c\n", copyStr[0])
    //输出有问题
    for c := range copyStr {
       fmt.Printf("%v ", c)
    }
    fmt.Println()
    for _, c := range copyStr {
       fmt.Printf("%v ", c)
    }
    fmt.Println()
    for _, c := range copyStr {
       fmt.Printf("%c ", c)
    }
 }

输出结果

image.png

3.stirng的API

除此之外,我们可以看一下这个string的相关API,除了切片之外,我们可以用到的API。

函数名功能返回值返回值分析
func Compare(a, b string) int比较字符-1,0,1a<b 返回1,a=b 返回0,a>b 返回 1
func Contains(s, substr string) bools中是否包含substrtrue/false包含则返回true,不包含返回false
func ContainsRune(s string, r rune) bools中是否包含r这个码点(unicode下的十进制编码)true/false包含则返回true,不包含返回false
func ContainsAny(s, chars string) bools中是否包含chars任意一个字符true/false如果包含任意一个字符返回true,一个都不包含则返回false
func Count(s, substr string) int计算s中包含多少个substrint最少0个

Package strings - The Go Programming Language (google.cn)这个网址是stringAPI网址,内容虽然是英文的,但是自带了IDE能够在线运行代码,而且给出了示例代码,真的很不错!!