1

你知道Go语言的Rune吗?

 1 year ago
source link: https://www.51cto.com/article/721138.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

你知道Go语言的Rune吗?

作者:程序员升级打怪之旅 2022-10-24 09:57:02
由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。当我们数据中有中文时,一定要注意rune的处理。

rune它是int32的别名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。

由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。

当我们数据中有中文时,一定要注意rune的处理。

len()详解

len()获得的是 byte 字节的数量,一个中文占用3个字节

s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()获得的是 byte 字节的数量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))

输出结果是:8 5 3

循环输出字符串

s := "Hello王"
for i := 0; i < len(s); i++ {
   fmt.Printf("%c\n", s[i])
}

输出结果:

图片

我们发现英文可以正常输出,但是中文通过这种方式输出会乱码

循环输出中文字符串

我们可以通过for range循环,从字符串中拿出具体的字符

s := "Hello王"
for _, c := range s {
   fmt.Printf("%c\n", c) //%c 字符
}

输出结果:

图片

字符串的修改

字符串修改是不能直接修改的,需要转成rune切片后再修改

s2 := "小白兔"
s3 := []rune(s2)        //把字符串强制转成rune切片
s3[0] = '大'             //注意 这里需要使用单引号的字符,而不是双引号的字符串
fmt.Println(string(s3)) //把rune类型的s3强转成字符串

输出结果:大白兔

字符和字符串的区别

c1 := "红"
c2 := '红'                            
fmt.Printf("c1的类型:%T c2的类型:%T \n", c1, c2) 
c3 := "H"                            
c4 := 'H'                            
fmt.Printf("c3的类型:%T c4的类型:%T \n", c3, c4)

输出结果:

c1的类型:string c2的类型:int32 
c3的类型:string c4的类型:int32

总结:我们发现只要是双引号包裹的类型就是string,只要是单引号包裹的类型就是int32,也就是rune。和中英文无关。

知识点:rune的别名是int32

n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的类型是:%T f的值是:%v\n", f,f)

输出结果:

f的类型是:float64 f的值是:10

字符串的修改要转成rune切片,而不能像PHP一样直接修改。

责任编辑:武晓燕 来源: 程序员升级打怪之旅

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK