Go語言遍歷字串——獲取每一個字串元素

2020-07-16 10:04:21
遍歷字串有下面兩種寫法。

遍歷每一個ASCII字元

遍歷 ASCII 字元使用 for 的數值回圈進行遍歷,直接取每個字串的下標獲取 ASCII 字元,如下面的例子所示。
theme := "狙擊 start"

for i := 0; i < len(theme); i++ {
    fmt.Printf("ascii: %c  %dn", theme[i], theme[i])
}
程式輸出如下:

ascii: ?  231
ascii:     139
ascii:     153
ascii: ?  229
ascii:     135
ascii: ?  187
ascii:    32
ascii: s  115
ascii: t  116
ascii: a  97
ascii: r  114
ascii: t  116


這種模式下取到的漢字“慘不忍睹”。由於沒有使用 Unicode,漢字被顯示為亂碼。

按Unicode字元遍歷字串

同樣的內容:
theme := "狙擊 start"

for _, s := range theme {
    fmt.Printf("Unicode: %c  %dn", s, s)
}
程式輸出如下:

Unicode: 狙  29401
Unicode: 擊  20987
Unicode:    32
Unicode: s  115
Unicode: t  116
Unicode: a  97
Unicode: r  114
Unicode: t  116


可以看到,這次漢字可以正常輸出了。

總結

  • ASCII 字串遍歷直接使用下標。
  • Unicode 字串遍歷用 for range。