go语言字符串精解

学了go语言的都知道,这门语言的字符串操作和其他高级语言还有不小的差异,比如你直接len(s)和len([]rune(s))的结果可能会不一样,原因是go语言对assii和unicode编码的内置处理造成的,也别急,接下来我们将一起来了解go语言字符串的方方面面。

一.字符串的字符数量

在go语言中,定义一个字符串变量的规范格式是var s string := "hello, 世界",我们想要知道变量s的长度是多少,在go语言中提供了len方法可以获取:

var s string = "hello, 世界"
slen := len(s)
fmt.Printf("len is %d",slen)

在没有执行代码之前,你可能会认为这里打印出len is 9,但是其实不是这样的,你会得到len is 13。

那为什么会得到上面意味之外的结果呢?往下看....

在go语言中,len函数其实统计的是字符串的字节数量,而因为go语言是用utf8编码,utf8编码是3个字节一个汉字。因此对于上面的例子来说,s字符串可以分为"hello" ","  " " "世界",前面是7个字节,后面两个汉字是6个字节,加起来就是13个字节了。

知道了len统计字符的方式,那我们有没有办法可以统计到正确的或者说是我们想要的字符长度呢? 当然可以,go语言为我们提供了两种方式可以获取的一个字符串的长度

var s string = "Hello, 世界"
fmt.Println(utf8.RuneCountInString(s))  //方式1
//方式2
var runes []rune = []rune(s)
fmt.Println(len(runes))

以上两种方式中,第一种方式很明显,是统计utf8编码的字符数,因为go语言是utf8编码的,所以可以统计出正确的字符数字9。而第二种方式又是什么意思呢?往下看....

二、rune解惑

在go语言中,有一种以前高级语言中没有的类型rune,那这个类型到底是什么意思呢?

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune rune

这是go语言中对这个类型的解释,大概意思就是rune类型其实就是int32类型的另一个别名,它的意义就是用于从整型值中辨别字符值,说白了这个类型就是为了解决非英语的人类语言的字符处理而专门定义的类型。

如果对rune数组做reflect.typeOf(runes).String(),你会发现,打印出来的类型其实是[]int32。

通过以上阐述,那就很好理解为什么前面所说的len(runes)可以拿到正确的字符数量了。因为in32是4个字节,而汉字是3个字节,rune是计算unicode的code point的。

 

三、字符串操作

大家都知道,字符串是不可变的,想要把几个字符串连接起来,就需要多创建几个字符串对象。在java中,可以使用StringBuilder或者StringBuffer解决,在go语言中也提供了工具类解决这类问题。

bytes.Buffer

这个结构定义了一些方法来实现字符串之间的追加操作。比如WriteString方法Write(byte []byte)方法等。

对于字符串的其他类似分隔、查找等方法,可以在工具类strings中找到,这里就不多赘述了,因为通过方法名就可以很好理解使用方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《PC机汇编语言实战精解》是一本关于PC机汇编语言编程的实用指南。本书通过详细而深入的讲解,帮助读者理解和掌握PC机汇编语言的基本概念和编程技巧。 首先,本书介绍了PC机汇编语言的基本知识和编程环境。它解释了汇编语言的基本概念、寄存器、内存与堆栈的结构,以及与汇编有关的软件工具和调试技巧。这些知识为读者打下了牢固的基础,使他们能够更好地理解和应用后续的内容。 其次,本书通过丰富的实例演示了如何使用PC机汇编语言编写实用的程序。它从简单的输入输出程序开始,逐步介绍了汇编语言的各种指令和编程技巧,包括数据传递、运算、循环、条件判断等。通过这些实例,读者可以亲手动手实践,加深对汇编语言的理解和应用能力。 此外,本书还讲解了PC机汇编语言与其他编程语言(如C语言)的配合使用。它介绍了如何在C语言程序中嵌入汇编代码,以及如何使用C语言编写调用汇编子程序的接口。这对于读者来说是非常实用的,可以更灵活地使用汇编语言进行优化和扩展。 总的来说,《PC机汇编语言实战精解》是一本很好的学习PC机汇编语言的教材。它以易懂的语言、丰富的实例和详细的讲解,引导读者逐步提高自己的汇编语言编程能力。无论是对于初学者还是有一定经验的程序员来说,本书都具有很高的参考价值,是一本不可多得的学习资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值