Go中字符串的遍历

灰侠_bf44 · · 1497 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

首先说一下go中的字符串类型:

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。

Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员。

字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。

下面介绍字符串的三种遍历方式,根据实际情况选择即可。

常规遍历方式:

var str = "Hello world!"

    for i := 0; i < len(str); i++ {

        fmt.Printf("str[%d]=%c\n", i, str[i])

    }

运行结果:

str[0]=H

str[1]=e

str[2]=l

str[3]=l

str[4]=o

str[5]=

str[6]=w

str[7]=o

str[8]=r

str[9]=l

str[10]=d

str[11]=!

如果有中文等非英文字符,for-range遍历方式:

该方式是按照字符遍历的,所以不会出现乱码,如下:

var str = "abc北京"

    for i, ch := range str {

        fmt.Printf("str[%d]=%c\n", i, ch)

    }

运行结果:

str1[0]=a

str1[1]=b

str1[2]=c

str1[3]=北

str1[6]=京


可以看到第二个汉子“京”的开始下标是6,直接跳过了4和5,可见确实依照utf8编码方式将三个字节组合成了一个汉字,str[3]-str[5]组合成“北”字,str[6]-str[8]组合成了“京”字。

由于下标的不确定性,所以引出了下面的遍历方式。

切片遍历方式

1 可以先将字符串转成 []rune 切片

2 再用常规方法进行遍历

//示例

    var str = "abc北京"

    str2 := []rune(str)

    for i := 0; i < len(str2); i++ {

        fmt.Printf("str[%d]=%c\n", i, str2[i])

    }

运行效果:

str[0]=a

str[1]=b

str[2]=c

str[3]=北

str[4]=京


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:灰侠_bf44

查看原文:Go中字符串的遍历

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1497 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传