go去掉字符串最后一个字符_Go语言字符串要注意的几个地方

5f36e866a721d03969048ba7fffb6c2b.png

Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。

这就引入了一个问题:对于ascii字符,一个字符占一个字节;对于非ASCII字符,比如汉字,一个字符就占3个字节。如字符串“hello北京”,它的字符长度是7,但它的字节长度是11.

  • 字符串的长度

内建函数 len() 返回的是字符串的字节长度,如果是字符串仅包含ASCII字符,那么也等于字符个数;对于包含非ASCII字符的字符串,len() 的返回值不等于字符个数,对于这类情况,使用 UTF-8 包提供的 RuneCountInString() 函数,统计 Uncode 字符数量。如:utf8.RuneCountInString("hello北京") 。

  • 字符串的遍历
  1. index 遍历
var str = "Hello北京"
for i := 0; i < len(str); i++ {
    fmt.Printf(str[i])
}

这种方式按照字节遍历,对于非ASCII字符会出现乱码。因为"北京"每个字占3个字节

2. for-range遍历

var str = "Hello北京"
for index, ch := range str {
    fmt.Printf(ch)
}

这种方式是按照字符遍历的,不会出现乱码,但是下标index会出现不连续的情况,它具有不确定性

3. 转换为 []rune 切片再用 index 遍历

var str = "Hello北京"
str2 := []rune(str)
for i := 0; i < len(str2); i++ {
    fmt.Printf(str2[i])
}

这种方式是按照字符遍历的,同时下标是连续的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值