Go中字符串的遍歷

首先說一下go中的字符串類型:
字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼標(biāo)識Unicode文本。

  • Go語言的字符串的字節(jié)使用UTF-8編碼標(biāo)識Unicode文本,這樣Golang統(tǒng)一使用UTF-8編碼,中文亂碼問題不會再困擾程序員。
  • 字符串一旦賦值了,字符串就不能修改了:在Go中字符串是不可變的。

下面介紹字符串的三種遍歷方式,根據(jù)實際情況選擇即可。

常規(guī)遍歷方式:

    var str = "Hello world!"
    for i := 0; i < len(str); i++ {
        fmt.Printf("str[%d]=%c\n", i, str[i])
    }

運行結(jié)果:

image

該遍歷方式==缺點==:遍歷是按照字節(jié)遍歷,因此如果有中文等非英文字符,就會出現(xiàn)亂碼,比如要遍歷"abc北京"這個字符串,效果如下:

image

可見這不是我們想要的效果,根據(jù)utf-8中文編碼規(guī)則,我們要str[3]str[4]str[5]三個字節(jié)合起來組成“北”字及 str[6]str[7]str[8]合起來組成“京”字。由此引出下面第二種遍歷方法。

for-range遍歷方式:

該方式是按照字符遍歷的,所以不會出現(xiàn)亂碼,如下:

    var str = "abc北京"
    for i, ch := range str {
        fmt.Printf("str[%d]=%c\n", i, ch)
    }

運行結(jié)果:

image

從圖中可以看到第二個漢子“京”的開始下標(biāo)是6,直接跳過了4和5,可見確實依照utf8編碼方式將三個字節(jié)組合成了一個漢字,str[3]-str[5]組合成“北”字,str[6]-str[8]組合成了“京”字。
由于下標(biāo)的不確定性,所以引出了下面的遍歷方式。

切片遍歷方式

1 可以先將字符串轉(zhuǎn)成 []rune 切片
2 再用常規(guī)方法進(jìn)行遍歷

//示例
    var str = "abc北京"
    str2 := []rune(str)
    for i := 0; i < len(str2); i++ {
        fmt.Printf("str[%d]=%c\n", i, str2[i])
    }

運行效果:

image

由此可見下標(biāo)是按1遞增的,沒有產(chǎn)生跳躍現(xiàn)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容