golang 基础(19)字符串

作者 : 开心源码 本文共1741个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共103人阅读

square-gopher.png

字符和字符串解决

func main(){    s := "Yes我爱Go!"    fmt.Printf("%s\n",[]byte(s))}

这样打印出是就是 “Yes我爱Go!”、打印一下(fmt.Println(len(s)))输出 s 长度为 12 。那么这个 12 是怎样来的呢。

fmt.Printf("%X\n",[]byte(s))

可以打印出里面具体字节的数字,会使用 %X 来打印字节

596573E68891E788B1476F21

这样并不便于观察,我们可以通过 for 循环来讲字符一个一个打印出来

for _, b := range []byte(s){            fmt.Printf("%X ",b)}fmt.Println()
59      65      73      E6      88      91      E7      88      B1      47      6F      21

这个是 ASC码,( E6 88 91)每个中文占三个字节,这个就是 utf-8 编码,是一个可变长的编码形式,那么每一个英文字母占一个字节。

上面我们是看字符串的字节是怎样放置的

我们换一种方式进行遍历打印,打印出没个字符的 unicode

for i, ch := range s{        fmt.Printf("(%d %X) ", i,ch)    }

从索引 3 开始值是 6211 ch 是一个 int32 类型,也就是 rune,rune 就是 int32 的别名 UTF-8 转 unicode,E6 88 91 是 uft-8 的编码转成了 unicode 编码 6211,下一字是从 6 开始转为 unicode 7231。这样打印出来索引并不连续。

(0 59) (1 65) (2 73) (3 6211) (6 7231) (9 47) (10 6F) (11 21)

可以使用 go 语言 utf8 标准库提供的 RuneCountInString 来进行打印。

fmt.Println("Rune count: ", utf8.RuneCountInString(s))

使用 RuneCountInString 这回输出为 9 对了

Rune count:  9

这样我们即可以通过遍历一个一个打印出来字符

bytes := []byte(s)    //拿到字节    for len(bytes) > 0 {        ch, size := utf8.DecodeRune(bytes)        //字符 中文字符size 3        bytes = bytes[size:]        fmt.Printf("%c ", ch)    }
package mainimport (    "fmt"    "unicode/utf8")func main(){    s := "Yes我爱Go!"    fmt.Println(len(s)) // 12    fmt.Println(s)    fmt.Printf("%X\n",[]byte(s))//596573E68891E788B1476F21    for _, b := range []byte(s){                fmt.Printf("%X\t",b)    }    //59      65      73      E6      88      91      E7      88      B1      47      6F      21    //每个中文是 3 字节 3 * 2 + 6 = 12 字节    fmt.Println()    for i, ch := range s{        fmt.Printf("(%d %X) ", i,ch)    }    //(0 59) (1 65) (2 73) (3 6211) (6 7231) (9 47) (10 6F) (11 21)    // 3 6211 ch 本身是 int 32 那就是 rune unicode 编码    //(6) utf-8 进行解码为 unicode     fmt.Println()    fmt.Println("Rune count: ", utf8.RuneCountInString(s))    //9 这个对了    bytes := []byte(s)    //拿到字节    for len(bytes) > 0 {        ch, size := utf8.DecodeRune(bytes)        //字符 中文字符size 3        bytes = bytes[size:]        fmt.Printf("%c ", ch)    }    //我们    fmt.Println()    for i,ch := range []rune(s) {        fmt.Printf("(%d %c)",i,ch)        //(0 Y)(1 e)(2 s)(3 我)(4 爱)(5 G)(6 o)(7 !)    }    //转为 rune 数组或者 slice    //range 遍历 pos rune 对 pos 是不连续    // utf8 RuneCountInString 获取字符数    // 使用len取得字节长度    // 使用 byte 获取字节    }

highres_442654178.jpeg

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » golang 基础(19)字符串

发表回复