如何索引Golang字符串中的字符?

use*_*828 74 string character go

如何获得"E"输出而不是69?

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}
Run Code Online (Sandbox Code Playgroud)

Golang是否具有将char转换为byte的功能,反之亦然?

pet*_*rSO 122

解释的字符串文字是使用单个字符的(可能是多字节)UTF-8编码的双引号""之间的字符序列.在UTF-8中,ASCII字符是与前128个Unicode字符对应的单字节.字符串的行为类似于字节切片.符文是标识Unicode代码点的整数值.因此,

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))              // ASCII only
    fmt.Println(string([]rune("Hello, ??")[1])) // UTF-8
    fmt.Println(string([]rune("Hello, ??")[8])) // UTF-8
}
Run Code Online (Sandbox Code Playgroud)

输出:

e
e
?
Run Code Online (Sandbox Code Playgroud)

读:

转到关于转换的编程语言规范部分.

Go Blog:Go中的字符串,字节,符文和字符


Ric*_*her 15

怎么样这个

fmt.Printf("%c","HELLO"[1])
Run Code Online (Sandbox Code Playgroud)

正如Peter指出的那样,不仅仅是ASCII:

fmt.Printf("%c", []rune("HELLO")[1])
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于ASCII字符集. (7认同)

inf*_*ner 8

您也可以尝试使用字符串对其进行类型转换。

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))
}
Run Code Online (Sandbox Code Playgroud)


and*_*olm 7

Go并没有这样的字符类型.byte通常用于ASCII字符,rune用于Unicode字符,但它们都只是整数类型的别名(uint8和int32).因此,如果您想强制将它们打印为字符而不是数字,则需要使用Printf("%c", x).该%c格式规范适用于任何整数类型.


Tho*_*ler 5

将 char 解释为字符串的一般解决方案是string("HELLO"[1]).

当然,Rich 的解决方案也有效。


Sam*_*ain 5

也可以通过切片来完成

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于一字节编码,尝试 `"हैलो"[:1]` 它会给你 � (3认同)