Go的字符串遍历,有两种方式:

  1. utf-8遍历
  2. unicode遍历
package main

import "fmt"

func main() {
str := "Hello,世界"
fmt.Println("Utf-8遍历")
for i := ; i < len(str); i++ {
ch := str[i]
fmt.Println(ch)
}
fmt.Println("Unicode遍历")
for _, ch1 := range str {
fmt.Println(ch1)
}
}

打印结果:

Utf-8遍历

Unicode遍历

上面代码执行后,会打印一串数字而不是字符。这是由于go语言中的字符串实际上是类型为byte的只读切片。或者说一个字符串就是一堆字节。这意味着,当我们将字符存储在字符串中时,实际存储的是这个字符的字节。一个字符串包含了任意个byte,它并不限定Unicode,UTF-8或者任何其他预定义的编码。

那么go语言用什么来表示字符呢,下面的例子可以验证一下:

package main

import (
"fmt"
"reflect"
) func main() {
str := "Hello,世界"
fmt.Println("Utf-8遍历")
for i := ; i < len(str); i++ {
ch := str[i]
ctype:=reflect.TypeOf(ch)
fmt.Printf("%s ",ctype)
}
fmt.Println("Unicode遍历")
for _, ch1 := range str {
ctype:=reflect.TypeOf(ch1)
fmt.Printf("%s ",ctype)
}
}

打印结果:

Utf-8遍历
uint8 uint8 uint8 uint8 uint8 uint8 uint8 uint8 uint8 uint8 uint8 uint8
Unicode遍历
int32 int32 int32 int32 int32 int32 int32 int32

代码运行后显示ch的类型为uint8,也就是byte类型,而ch1的类型为int32,也就是rune类型。

go语言中的源码定义为utf-8文本,不允许其他的表示。

但是也存在特殊处理,那就是字符串上使用for…range循环。

range循环迭代时,就会解码一个utf-8编码的rune。

现在既然已经知道上述不管哪种遍历方式,其实质都是字节。

所以在打印时,只需要将这些结果转化为字符字面值或者转换其输出类型就可以了。

下面是两种字符串遍历方式:

package main

import (
"fmt"
) func main() {
str := "Hello,世界"
fmt.Println("方法一 格式化打印")
for _, ch1 := range str {
fmt.Printf("%q",ch1) //单引号围绕的字符字面值,由go语法安全的转义
}
fmt.Println("方法二 转化输出格式")
for _, ch2 := range str {
fmt.Println(string(ch2))
}
}

打印结果:

方法一  格式化打印
'H''e''l''l''o'',''世''界' 方法二 转化输出格式
H
e
l
l
o
,

最新文章

  1. juqery 正则表达式的使用
  2. oracle xmltype导入并解析Excel数据 (一)创建表与序
  3. WebView自适应屏幕大小
  4. A problem is easy
  5. javaScript常用方法整合(项目中用到过的)
  6. PHP 函数的引用传递
  7. codevs1145
  8. Ubuntu Server修改IP、DNS、hosts
  9. 从M个数中随机选出N个数的所有组合,有序,(二)
  10. Toolbar Painter 工具条制作
  11. JavaScript设计模式--桥梁模式--XHR连接队列
  12. 【开发技术】Eclipse插件Call Hierarchy简介及设置
  13. Java数组声明、初始化
  14. 知识点:synchronized 原理分析
  15. NOIP模拟赛20180917 隐藏题目
  16. 使用kafka consumer api时,中文乱码问题
  17. vue2.* 事件结合双向数据绑定、模块化以及封装Storage实现todolist 待办事项 已经完成 和进行中持久化 06
  18. Git 清除远端已删除的分支
  19. Python3.x:bs4解析html基础用法
  20. ospf基础理论

热门文章

  1. python封装configparser模块获取conf.ini值(优化版)
  2. QT学习之如何在QToolBar中添加带图标的QToolButton并设置图标大小
  3. 关于npm镜像,发布,内网搭建等
  4. 【Python】Flask中@wraps的使用
  5. 关于tarjan
  6. juypter4.4.0 自动补全
  7. FhqTreap的区间翻转
  8. eclipse导入maven时,pom文件的project一直报错(Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.)
  9. ffmypeg 视频处理类库使用方法
  10. appium 与 selenium python解决python &#39;WebElement&#39; object does not support indexing 报错问题问题