135 votes

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

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

package main

import "fmt"

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

Est-ce que Golang a une fonction pour convertir un char en byte et vice versa ?

202voto

peterSO Points 25725

Les chaînes de caractères interprétées sont des séquences de caractères entre guillemets doubles "" utilisant l'encodage UTF-8 (éventuellement sur plusieurs octets) des caractères individuels. En UTF-8, les caractères ASCII sont sur un seul octet correspondant aux 128 premiers caractères Unicode. Les chaînes de caractères 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
界

Lisez :

Spécification du langage de programmation Go section sur Conversions .

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

26voto

Rich Churcher Points 917

Et si ce ?

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

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

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

15voto

Samkit Jain Points 687

Peut aussi se faire par tranchage

package main

import "fmt"

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

NOTE : Cette solution ne fonctionne que pour les caractères ASCII.

12voto

infiniteLearner Points 117

Vous pouvez également essayer de le convertir en chaîne de caractères.

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))
}

8voto

andybalholm Points 3197

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X