golang字符串截取操作

golang字符串截取操作

字符串处理,截取,中文字符串截取

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

1、字节切片截取

第一个方案,利用 go 的内置切片语法截取字符串:

    s := "abcdefghi"
    fmt.Println(s[1:6]) 
    //输出bcdef 截取方式[1,6)第一个索引开始到第六个索引位置计算,包含起始位置,不包含结束位置
  

但是字节切片截取按字节截取,在处理ASCII单字节字符串截取,没有什么比这更完美的方案了,中文往往占多个字节,在 utf8编码中是3个字节,如下程序我们将获得乱码数据

    s := "Go语言是最棒的的"
    fmt.Println(s[1:6])
    //这样输出:o语� 出现了乱码

解决多字节字符截取:将字符串转换为 []rune,然后按切片语法截取,再把结果转成字符串

      s = "Go语言是最棒的的"
    newS:=[]rune(s)
    fmt.Println(string(newS[1:6]))
    //输出:o语言是最 同样是半包含原则

2、utf8.DecodeRuneInString

utf8.DecodeRuneInString 函数可以转换单个字符,并给出字符占用字节的数量:这种方法是将需要截取的字符长度所占的总字节数计算出来,然后通过切片方式截取字符串


    s = "Go语言是最棒的的"
    length := 6 
    var size, n int
    for i := 0; i < length && n < len(s); i++ {
        _, size = utf8.DecodeRuneInString(s[n:])
        n += size
    }
    fmt.Println(s[:n]) //Go语言是最
    fmt.Println(s[n:]) //棒的的

3、range

range是按字符迭代的,并非字节。使用range迭代字符串时返回字符起始索引和对应的字字符


    str := "Go语言是Google开发的一种静态强类型、编译型、并发型,并具有"
    length := 6
    var l, ind int
    for ind = range str{
        if l == length {
            break
        }
        l++
    }
    fmt.Println(str[:ind]) //Go语言是G
    fmt.Println(str[ind:]) //oogle开发的一种静态强类型、编译型、并发型,并具有

推荐一个包go-extend收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码。

福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值