web-dev-qa-db-fra.com

Comment indexer des caractères dans une chaîne de Golang?

Comment obtenir une sortie "E" au lieu de 69?

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

Golang a-t-il la fonction de convertir un caractère en octet et vice versa?

68
user977828

Les littéraux de chaîne interprétés sont des séquences de caractères entre guillemets "" utilisant le codage UTF-8 (éventuellement sur plusieurs octets) de caractères individuels. Dans UTF-8, ASCII les caractères sont des octets correspondant aux 128 premiers caractères Unicode. Les chaînes se comportent comme des tranches d’octets. Une rune est une valeur entière identifiant un point de code Unicode. Par conséquent,

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))              // ASCII only
    fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
    fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}

Sortie:

e
e
界

Lis:

Aller à la spécification du langage de programmation Section sur Conversions .

Le blog Go: Chaînes, octets, runes et caractères dans Go

115
peterSO

Que diriez-vous de this ?

fmt.Printf("%c","HELLO"[1])

Comme Peter le fait remarquer, pour permettre plus qu’un simple ASCII:

fmt.Printf("%c", []rune("HELLO")[1])
15
Rich Churcher

Go n'a pas vraiment de type de personnage en tant que tel. byte est souvent utilisé pour ASCII caractères, et rune est utilisé pour les caractères Unicode, mais ce ne sont que des alias pour les types entiers (uint8 et int32). Donc, si vous voulez les forcer à être imprimés en tant que caractères au lieu de chiffres, vous devez utiliser Printf("%c", x). Le %c La spécification de format fonctionne pour tout type entier.

7
andybalholm

Peut être fait en tranchant aussi

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}
5
Samkit Jain

La solution générale pour interpréter un caractère en tant que chaîne est string("HELLO"[1]).

La solution de Rich fonctionne également, bien sûr.

4
Thomas Kappler

Essayez ceci pour obtenir les caractères par leur index

package main

import (
      "fmt"
      "strings"
)

func main() {
   str := strings.Split("HELLO","")
    fmt.Print(str[1])
}
0
Anshu