GO语言以下标切割字符串 go字符串处理

Go中字符串的遍历

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

成都创新互联公司是专业的富民网站建设公司,富民接单;提供网站设计制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行富民网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

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

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

该遍历方式==缺点==:遍历是按照字节遍历,因此如果有中文等非英文字符,就会出现乱码,比如要遍历"abc北京"这个字符串,效果如下:

可见这不是我们想要的效果,根据utf-8中文编码规则,我们要str[3]str[4]str[5]三个字节合起来组成“北”字及 str[6]str[7]str[8]合起来组成“京”字。由此引出下面第二种遍历方法。

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

运行结果:

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

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

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

2 再用常规方法进行遍历

运行效果:

由此可见下标是按1递增的,没有产生跳跃现象。

Go语言中用下标访问string类型,输出的是什么编码

package main

import "fmt"

var arr [2]int //申明一个数组

func main() {

arr[0] = 1 //数组赋值

fmt.Println(arr)

arrtest := [3]int{1, 2, 3} //数组的另一种申明方式

fmt.Println(arrtest)

a := [...]int{1, 2} //[...]自动识别数组的长度

fmt.Println(a)

fmt.Println(len(a))//输出数组的长度

}

下边是slice的申明和使用其实这就是一种动态的数组

复制代码 代码如下:

package main

import "fmt"

func main() {

d := []int{1, 2, 3} //申明一个slice这个是动态的数组,没有长度

fmt.Println(d)

var q, w []int

q = d[0:1] //可以定取得上边的长度

w = d[1:3]

d = append(d, 2) //向其中添加元素

fmt.Println(d)

fmt.Println(q, w)

}

go语言中实现切片(slice)的三种方式

定义一个切片,然后让切片去引用一个已经创建好的数组。基本语法如下:

索引1:切片引用的起始元素位

索引2:切片只引用该元素位之前的元素

例程如下:

在该方法中,我们未指定容量cap,这里的值为5是系统定义的。

在方法一中,可以用arr数组名来操控数组中的元素,也可以通过slice切片来操控数组中的元素。切片是直接引用数组,数组是事先存在的,程序员是可见的。

通过 make 来创建切片,基本语法如下:

make函数第三个参数cap即容量是可选的,如果一定要自己注明的话,要注意保证cap≥len。

用该方法可以 指定切片的大小(len)和容量(cap)

例程如下:

由于未赋值系统默认将元素值置为0,即:

数值类型数组:    默认值为 0

字符串数组:       默认值为 ""

bool数组:           默认值为 false

在方法二中,通过make方式创建的切片对应的数组是由make底层维护,对外不可见,即只能通过slice去访问各个元素。

定义一个切片,直接就指定具体数组,使用原理类似于make的方式。

例程如下:


新闻标题:GO语言以下标切割字符串 go字符串处理
分享网址:http://scyanting.com/article/dddiicd.html