zoukankan      html  css  js  c++  java
  • rune类型分析

    查询,官方的解释如下:

    1
    2
    3
    4
    5
    6
    7
    // 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.
     
    //int32的别名,几乎在所有方面等同于int32
    //它用来区分字符值和整数值
     
    type rune = int32

      

    看代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package main
     
    import "fmt"
     
    func main() {
     
        var str = "hello 你好"
        fmt.Println("len(str):", len(str))
     
    }

      

    们猜测结果应该是:8:5个字符1个空格2个汉字。那么正确答案是多少呢?

    结果是 :12

    这是为什么呢?

    golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

    解决方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ackage main
     
    import (
        "fmt"
        "unicode/utf8"
    )
     
    func main() {
     
        var str = "hello 你好"
     
        //golang中string底层是通过byte数组实现的,座椅直接求len 实际是在按字节长度计算  所以一个汉字占3个字节算了3个长度
        fmt.Println("len(str):", len(str))
         
        //以下两种都可以得到str的字符串长度
         
        //golang中的unicode/utf8包提供了用utf-8获取长度的方法
        fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))
     
        //通过rune类型处理unicode字符
        fmt.Println("rune:", len([]rune(str)))
    }

      

    golang中还有一个byte数据类型与rune相似,它们都是用来表示字符类型的变量类型。它们的不同在于:

    • byte 等同于int8,常用来处理ascii字符
    • rune 等同于int32,常用来处理unicode或utf-8字符

    原文:https://www.cnblogs.com/echojson/p/10746597.html

  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/show58/p/12720041.html
Copyright © 2011-2022 走看看