2012-10-29 1 views
6

Die Elemente von Zeichenfolgen haben den Typ Byte und können mit den üblichen Indizierungsoperationen aufgerufen werden.Indexierungszeichenfolge als Zeichen

Wie kann ich Element der Zeichenfolge als Zeichen erhalten?

"some" [1] -> "o"

Antwort

10

Die einfachste Lösung ist es zu einer Reihe von Runen zu konvertieren:

var runes = []rune("someString") 

Beachten Sie, wenn Sie auf einem iterieren Zeichenfolge, Sie brauchen die Konvertierung nicht. Sehen Sie dieses Beispiel aus Effective Go:

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

Dieser druckt

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

Go-Strings sind in der Regel, aber nicht notwendigerweise, UTF-8 codiert. In dem Fall, dass es sich um Unicode-Strings handelt, ist der Begriff "char [acter]" ziemlich komplex und es gibt keine generelle/eindeutige Bijektion von Runen (Codepunkten) und Unicode-Zeichen.

Auf jeden Fall kann man leicht mit Codepunkten arbeiten (Runen) in einer Scheibe und Indizes in sie mit einer Umwandlung:

package main 

import "fmt" 

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

Auch hier: http://play.golang.org/p/qWVSA-n93o

Hinweis: Oft ist der Wunsch nach Unicode zugreifen "Zeichen" nach Index ist ein Konstruktionsfehler. Die meisten Textdaten werden sequentiell verarbeitet.

Verwandte Themen