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

如何得到一个“ E”而不是69的输出?

package main


import "fmt"


func main() {
fmt.Print("HELLO"[1])
}

Golang 是否具有将字符转换为字节的功能,反之亦然?

196672 次浏览

这个呢?

fmt.Printf("%c","HELLO"[1])

正如 Peter 指出的,要考虑到不仅仅是 ASCII:

fmt.Printf("%c", []rune("HELLO")[1])

将字符解释为字符串的通用解决方案是 string("HELLO"[1])

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

解释的字符串文字是使用单个字符的 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
}

产出:

e
e
界

阅读:

程序设计语言规范 转换章节。

围棋博客: 围棋中的字符串、字节、符文和字符

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

在字符串中隔离字符的另一种解决方案

package main
import "fmt"


func main() {
var word string = "ZbjTS"


// P R I N T
fmt.Println(word)
yo := string([]rune(word)[0])
fmt.Println(yo)


//I N D E X
x :=0
for x < len(word){
yo := string([]rune(word)[x])
fmt.Println(yo)
x+=1
}


}

对于字符串数组也是:

fmt.Println(string([]rune(sArray[0])[0]))

//= 注释行

也可以通过切片来完成

package main


import "fmt"


func main() {
fmt.Print("HELLO"[1:2])
}

注意: 此解决方案仅适用于 ASCII 字符。

尝试这样获取字符的索引

package main


import (
"fmt"
"strings"
)


func main() {
str := strings.Split("HELLO","")
fmt.Print(str[1])
}

您还可以尝试使用 string 对其进行类型转换。

package main


import "fmt"


func main() {
fmt.Println(string("Hello"[1]))
}

字符串字符是符号,因此要打印它们,必须将它们转换回 String。

fmt.Print(string("HELLO"[1]))

解决方案将是:

 package main


import "fmt"


func main() {
str := "HELLO"
string(str[0])//H
string(str[1])//E
string(str[2])//L
string(str[3])//L
string(str[4])//O
}