组成每个字符串的元素叫做字符,可以通过遍历字符串元素获得字符,字符用单引号’ '定义
Go 语言的字符有以下两种:
1.Uint8类型,或者叫字节(Byte)型,代表了ascii码的一个字符。
2.符文rune类型,代表一个UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。符文类型实际是一个int32。
Go使用了特殊的符文类型来处理Unicode(Unicode),让基于Unicode的文本处理更为方便也可以使用字节(Bvte)型进行默认字符串处理,性能和扩展性都有照顾。
package main
func main(){
//1.定义,字符属于int型
var a = 'a'
fmt.Printf("值:%v,类型%T",a,a) //97,int32 a对应的码值
//2.原样输出
var b = 'b'
fmt.Printf("值:%c,类型%T",b,b) //b,int32
//定义一个字符串
var str = "ihan"
fmt.Printf("码值:%v,原样输出%c,类型%T",str[0],str[0],str[0]) //105 i uint8
//一个汉字占用 3个字节(utf-8) 一个字母占用一个字节
//unsafe.Sizeof() 不能用于string类型,底层决定的 可以使用len()
var str1 = "ihan"
fmt.Println(len(str1)) //4
var str2 = "你好ihan" //10
//汉字 使用utf-8编码 字母使用ASCII编码
var str3 = '国'
fmt.Printf("值:%v,类型%T",str3 ,str3 ) //22269,int32
//输入每一个字符
str:="ihan" //全是字母
for i := 0; i<len(str); i++ { //byte
fmt.Printf("%v,%c",str[i],str[i])
}
str:="你好ihan" //混合
for _, r := range str { //range 把byte类型转换为rune
fmt.Printf("%v,%c",r ,r )
}
}
修改字符串
要修改字符串,需要先将其转换成[]rune 或[]byte,完成后再转换为 string。无论哪种转换,都会重新分配内存,并复制它节数组。
func changeString(){
s1 : "big"
//强制类型转换
byteS1 := []byte(s1)
byteS1[0]= 'p'
fmt.Printin(string(byteS1)) //pig
s2 :=“白萝卜"
runeS2 := []rune(s2)
runeS2[0]='红'
fmt.Println(string(runeS2)) //红萝卜
Go语言中的字符是Unicode字符,使用rune类型表示。一个rune可以是任何Unicode字符,包括字母、数字、符号等。字符的值可以通过单引号包裹,例如 ‘a’、‘1’、'中’等。
在字符串中,每个字符都占用一个或多个字节的内存空间,具体取决于字符的编码方式。Go语言中默认使用UTF-8编码,一个英文字符占用1个字节,一个中文字符占用3个字节。
可以使用len()函数获取字符串的字节数,使用utf8.RuneCountInString()函数获取字符串的字符数。可以使用[]rune将字符串转换为rune切片,每个元素表示一个字符。
Go语言还提供了一些处理字符的内置函数,如strings包中的Contains()、Index()、Split()等,可以更方便地操作字符串中的字符。
ASCII(American Standard Code for Information Interchange)和UTF-8(Unicode Transformation Format 8-bit)是两种字符编码方式。
ASCII是一种最常见的字符编码方式,它使用一个字节(8位)来表示一个字符,共有128个字符,包括英文字母、数字和一些常见的标点符号。ASCII编码是由美国国家标准学会(ANSI)于1963年定义的,主要用于英语和其他西方语言。
UTF-8是一种可变长度的字符编码方式,它可以使用1个到4个字节来表示一个字符。UTF-8编码可以表示几乎所有的字符,包括ASCII字符和几乎所有的国际字符。UTF-8编码是Unicode字符编码标准的一种实现方式。
与ASCII相比,UTF-8具有更广泛的字符表示能力,可以支持全球各种语言的字符。因此,在多语言环境下,UTF-8通常被更广泛地使用。