当前位置 博文首页 > Golang中文字符串截取函数实现原理

    Golang中文字符串截取函数实现原理

    作者:admin 时间:2021-06-25 18:29

    在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。

    例如:

    想要截取前四个字

    name := "我是胡八一"
    fmt.Println("name[:4] = ",name[:4])

    执行后得到的结果会是这样的:

    name[:4] = 我?

    解决方法:
    先将其转为[]rune,再截取后,转会string

    nameRune := []rune(name)
    fmt.Println("string(nameRune[:4]) = ",string(nameRune[:4]))

    运行结果:

    string(nameRune[:4]) =  我是胡八

    好了弄懂了原理我们来写一个完整的Golang中文字符串截取函数

    func SubString(str string, begin, length int) string {
      fmt.Println("Substring =", str)
      rs := []rune(str)
      lth := len(rs)
      fmt.Printf("begin=%d, end=%d, lth=%d\n", begin, length, lth)
      if begin < 0 {
        begin = 0
      }
      if begin >= lth {
        begin = lth
      }
      end := begin + length
    
      if end > lth {
        end = lth
      }
      fmt.Printf("begin=%d, end=%d, lth=%d\n", begin, length, lth)
      return string(rs[begin:end])
    }

    实现Golang中文字符串截取函数很简单利用golang原理语句就可实现

    js
    下一篇:没有了