2015-07-06 74 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 –