如何得到一个“ E”而不是69的输出?
package main import "fmt" func main() { fmt.Print("HELLO"[1]) }
Golang 是否具有将字符转换为字节的功能,反之亦然?
这个呢?
fmt.Printf("%c","HELLO"[1])
正如 Peter 指出的,要考虑到不仅仅是 ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
将字符解释为字符串的通用解决方案是 string("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格式规范适用于任何整数类型。
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 }