2012-10-29 14 views
6

Elementy ciągów mają bajt typu i można do nich uzyskać dostęp za pomocą zwykłych operacji indeksowania .Łańcuch indeksowania jako znaki

Jak mogę uzyskać element ciągu jako znak?

"niektóre" [1] -> "O"

Odpowiedz

10

Najprostszym rozwiązaniem jest, aby przekształcić go do tablicy run:

var runes = []rune("someString") 

Zauważ, że gdy iteracyjne na zasadzie ciąg, nie potrzebujesz konwersji. Zobacz ten przykład z Effective Go:

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

Drukuje

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

Go łańcuchy są zazwyczaj, ale niekoniecznie, kodowanie UTF-8. W przypadku, gdy są to ciągi Unicode, termin "char [act]" jest dość złożony i nie ma generalnego/unikalnego bijsu runów (punktów kodowych) i znaków Unicode.

Zresztą można łatwo pracować z punktów kodowych (runy) w segmencie i ruchu indeksów do niego za pomocą konwersji:

package main 

import "fmt" 

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

Również tutaj: http://play.golang.org/p/qWVSA-n93o

uwaga: często chęć dostępu Unicode "znaki" według indeksu jest błędem projektu. Większość danych tekstowych jest przetwarzana sekwencyjnie.

Powiązane problemy