在Golang中打印字符串数组中特定字节的值

4

我刚接触Go语言,想要打印字符串数组的每个字节。

就像下面的代码一样,我想逐个打印出'h'、'e'、'l'、'l'、'o'这些值,但是我无法做到。

func main() {
    strslice := make([]string, 4, 5)
    strslice[0] = "hello"
    strslice[1] = "go"
    strslice[2] = "lang"
    strslice[3] = "whatsup"
    for i := 0; i < len(strslice[i]); i++ {
        fmt.Printf("slice is %c \n", strslice[i])
    }
}

for i := 0; i < len(strslice[0]); i++ { fmt.Printf("slice is %c \n", strslice[0][i]) } 这就是解决问题的方法。 - Volker
2个回答

6
在Go语言中,字符字面值以可变长度的UTF-8编码字节数序列的形式存储在字符串中。ASCII代码点(0x00.. 0x7F)占用一个字节。其他代码点占用两到四个字节。要单独打印代码点(字符),
package main

import "fmt"

func main() {
    strslice := make([]string, 5, 5)
    strslice[0] = "hello"
    strslice[1] = "go"
    strslice[2] = "lang"
    strslice[3] = "whatsup"
    strslice[4] = "Hello, 世界"
    for _, s := range strslice {
        for _, c := range s {
            fmt.Printf("%c ", c)
        }
        fmt.Printf("\n")
    }
}

输出:

h e l l o 
g o 
l a n g 
w h a t s u p 
H e l l o ,   世 界 

以下是对UTF-8编码字节和字符差异的说明示例:
package main

import "fmt"

func main() {
    str := "Hello, 世界"
    fmt.Println("Bytes:")
    for i := 0; i < len(str); i++ {
        fmt.Printf("'%c' ", str[i])
    }
    fmt.Printf("\n")
    fmt.Println("Characters:")
    for _, c := range str {
        fmt.Printf("'%c' ", c)
    }
    fmt.Printf("\n")
}

输出:

Bytes:
'H' 'e' 'l' 'l' 'o' ',' ' ' 'ä' '¸' '' 'ç' '' '' 
Characters:
'H' 'e' 'l' 'l' 'o' ',' ' ' '世' '界' 

参考文献:

Unicode UTF-8 FAQ

For语句,Go编程语言规范


1
+1,展示字符和字节之间的差异非常重要。 - raina77ow

3

一种可能的方法:

func main() {
    strslice := make([]string, 4, 5)

    strslice[0] = "hello"
    strslice[1] = "go"
    strslice[2] = "lang"
    strslice[3] = "whatsup"

    for i := 0; i < len(strslice); i++ {
        for j := 0; j < len(strslice[i]); j++ {
            fmt.Printf("slice[%d] is %c \n", i, strslice[i][j])
        }

    }
}
演示。如您所见,每个strslice元素都在嵌套的for循环中迭代,使用自己的循环变量(j)。

strslice [i] [j]中,i用于访问切片的一个元素(字符串),j用于访问此字符串的特定字节。

请注意,这是字节,而不是字符 - 因为这正是所要求的。但是,如果您实际上想打印出字符串的每个字符,请查看@peterSO的精彩答案 - 因为有很大的机会你确实需要它。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接