2012-10-29 25 views
6

Gli elementi delle stringhe sono di tipo byte e si può accedere utilizzando le normali operazioni di indicizzazione .Stringa di indicizzazione come caratteri

Come posso ottenere l'elemento di stringa come carattere?

"alcuni" [1] -> "o"

risposta

10

La soluzione più semplice è quello di convertirlo in una serie di rune:

var runes = []rune("someString") 

Si noti che quando si itera su un stringa, non hai bisogno della conversione. Vedere questo esempio da Effective Go:

for pos, char := range "日本語" { 
    fmt.Printf("character %c starts at byte position %d\n", char, pos) 
} 

Questo stampa

character 日 starts at byte position 0 
character 本 starts at byte position 3 
character 語 starts at byte position 6 
4

stringhe Go sono di solito, ma non necessariamente, codifica UTF-8. Nel caso si tratti di stringhe Unicode, il termine "char [acter]" è piuttosto complesso e non vi è alcuna generica/unica biiezione di rune (punti codice) e caratteri Unicode.

In ogni caso si può facilmente lavorare con punti di codice (rune) in una fetta e sull'uso di indici in esso con una conversione:

package main 

import "fmt" 

func main() { 
     utf8 := "Hello, 世界" 
     runes := []rune(utf8) 
     fmt.Printf("utf8:% 02x\nrunes: %#v\n", []byte(utf8), runes) 
} 

Anche qui: http://play.golang.org/p/qWVSA-n93o

Nota: Spesso il desiderio di accedere a Unicode "caratteri" per indice è un errore di progettazione. La maggior parte dei dati testuali viene elaborata in sequenza.