Maison >développement back-end >Golang >Comment obtenir la longueur des caractères d'une rune en langage Go

Comment obtenir la longueur des caractères d'une rune en langage Go

藏色散人
藏色散人avant
2021-06-09 15:05:132788parcourir

La colonne tutorielle suivante de golang vous présentera comment obtenir la longueur des caractères par rune dans le langage go. J'espère qu'elle sera utile aux amis qui en ont besoin !

Comment obtenir la longueur des caractères d'une rune en langage Go

rune est un type de données spécial dans le langage Go. C'est un alias de int32 et est équivalent à int32 dans presque tous les aspects. Il est utilisé pour distinguer les valeurs de caractères et les valeurs entières. suit :

// 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

Regardons cela à travers un exemple :

package mainimport "fmt"func main() {
    var str = "hello 你好啊"
    fmt.Println("len(str):", len(str))}

Devinons le résultat, bonjour c'est 5 caractères + 1 espace + 3 caractères chinois, ce qui devrait faire 9 au total, et la longueur est 9, mais nous l'exécutons,

Comment obtenir la longueur des caractères dune rune en langage Go

et le résultat imprimé est 15. Pourquoi est-ce ?

La couche inférieure de la chaîne dans Golang est implémentée via un tableau d'octets. Les caractères chinois occupent 2 octets sous Unicode et 3 octets sous l'encodage utf-8, et l'encodage par défaut de Golang est exactement utf-8.

La longueur calculée est donc égale à 5+1+3*3=15
Si nous devons calculer la longueur de la chaîne au lieu du nombre d'octets sous-jacents, nous pouvons utiliser The méthode suivante :

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    var str = "hello 你好啊"
    //golang中string底层是通过byte数组实现的,座椅直接求len 实际是在按字节长度计算  所以一个汉字占3个字节算了3个长度
    fmt.Println("len(str):", len(str)) // 15
    //以下两种都可以得到str的字符串长度

    //1、golang中的unicode/utf8包提供了用utf-8获取长度的方法
    fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))

    //2、通过rune类型处理unicode字符
    fmt.Println("rune:", len([]rune(str)))
}

Le résultat en cours d'exécution est le suivant :
Comment obtenir la longueur des caractères dune rune en langage Go

Il y en a un autre au-dessus de la définition de la rune, byte = uint8

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8
  • byte est équivalent Équivalent à int8, couramment utilisé pour traiter les caractères ascii
  • rune est équivalent à int32, couramment utilisé pour traiter les caractères unicode ou utf-8

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer