Go学习:字符串的应用

Go字符串的应用

1 计算字符串的长度

Go 语言的内建函数len(),可以用来获取切片、 字符串 、通道 channel )等的长度。

下面的代码可以用len()来获取字符串的长度。

tip1 := "genji is a ninja"
fmt.Println(len(tip1))

总结

• ASCII 字符串长度使Len()函数

•Unicode 字符串长度使用 utf8 .RuneCountlnString() 函数。

2 遍历字符串

  1. 遍历每一个ASCII字符

    ASCII 字符串遍历直接使用下标。

  2. 按Unicode字符遍历字符串

    字符串遍历用 for range。

示例代码如下:

theme := "狙击 start"
for i :=0; i < len(theme); i++ {
    fmt.Printf("ascii: %c %d\n", theme[i], theme[i])
}

for _, s := range theme{
    fmt.Printf("ascii: %c %d\n",s, s)
}

3 获取字符串的某一段字符

总结:

字符串索引 比较常用的有如下几种方法。

  • strings.Index :正向搜索子字符串。

  • strings.Lastlndex :反向搜索子字符串

  • 搜索的起始位 可以通过切片偏移制作

示例代码如下:

tracer := "死神来了, 死神Bye Bye"
comma := strings.Index(tracer, ", ")
pos := strings.Index(tracer[comma:], "死神")
fmt.Println(comma, pos, tarcer[comma+pos:])

4 修改字符串

Go 的字符串无法直接修改每一个字符元素,只能通过重新构造新的字符串井赋值给原来的字符串变量实现。请参考下面的代码:

angle := "Heros never die"
angleBytes := []byte(angle)
for i := 5; i <= 10; i++ {
 	angleBytes[i] = ' '
}
fmt.Println(string(angleBytes))

Go 中的字符串和其他高级语 (Java、C#)一样,默认是不可变的( immutable)

字符串不可变有很多好处,如天生线程安全,大家使用的都是只读对象,无须加锁

再者,方便内存共享,而不必使用写时复制( Copy On Write )等技术;字符串 hash 值也只需要制作一份。

所以说,代码中实际修改的是[]byte, []byte在Go语言中是可变的 ,本身就是切片

在完成了对[] byte 操作后,使用 string() 将[] byte 转为字符串时,重新创建一个新的字符串。

总结:

  • Go 字符串是不可变的。

  • 修改字符串时,可以将字符串转换为[]byte 进行修改。

  • []byte 和string 可以通过强制类型转换互转。

5 连接字符串

StringBuilder 的机制来进行高效的字符串连接,例如:

6 格式化

格式化在逻辑中非常常用。使用格式化函 要注意写法:

fmt.Sprintf (格式化样式,参数列表...)

  • 格式化样式 宇符串形式,格式化动词以%开头。

  • 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

Go 语言中 格式化的命名延续C语言风格

下表标出了常用的一些格式化样式中的动词及功能

动词功能
%v按值的本来值输出
%+v在%v的基础上,对结构体字段名和值进行展开
%#v输出Go语言语法格式的值
%T输出Go语言语法格式的类型和值
%%输出%本体
%b整型以2进制方式显示
%o整型以8进制方式显示
%d整型以10进制方式显示
%x整型以16进制方式显示
%X整型以16进制、字母大写方式显示
%UUnicode字符
%f浮点数
%p指针,16进制方式显示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值