2015-07-06 105 views

回答

11

Go中的字符類型是rune,它是int32的別名,因此它已經是一個數字,只是將其打印出來。

您仍需要一種方法來獲取指定位置上的字符。最簡單的方法是將string轉換爲您可以索引的[]rune。要將string轉化爲符文,只需使用類型轉換[]rune("some string")

fmt.Println([]rune("s")[0]) 

打印:

115 

如果你想它以字符,請使用%c格式字符串:

fmt.Println([]rune("absdef")[2])  // Also prints 115 
fmt.Printf("%c", []rune("absdef")[2]) // Prints s 

另請注意,string上的for range迭代了字符串的符號,因此您也可以使用它。這比將整個string[]rune更高效:

i := 0 
for _, r := range "absdef" { 
    if i == 2 { 
     fmt.Println(r) 
     break 
    } 
    i++ 
} 

包成一個功能:

func charCodeAt(s string, n int) rune { 
    i := 0 
    for _, r := range s { 
     if i == n { 
      return r 
     } 
     i++ 
    } 
    return 0 
} 

嘗試這些在Go Playground

還要注意的是string S IN圍棋存儲在內存中的[]byte這是文字的UTF-8編碼的字節序列(閱讀更多信息博客文章Strings, bytes, runes and characters in Go)。如果你保證string使用的代碼小於127的字符,你可以簡單地使用字節。這是在Go索引string索引它的字節,因此例如"s"[0]'s'的字節值,它是115

fmt.Println("s"[0])  // Prints 115 
fmt.Println("absdef"[2]) // Prints 115 
+0

謝謝。是的......我知道一個字符串被自動處理爲一個字符數組。 JavaScript也這樣做。 – Knights

+3

@JheneKnights不,在一個字符串中存儲的是字節片段,它是字符的utf-8編碼字節序列。有關更多詳細信息,請參閱此博客帖子:[Go中的字符串,字節,符文和字符](http://blog.golang.org/strings)。所以獲得'符文'需要解碼字節。 – icza

+0

'charCodeAt'函數返回字節索引'n'處的符文,而不是符號索引'n'。見https://play.golang.org/p/QDLzyqSxkI –