Go中字串的遍曆

來源:互聯網
上載者:User

首先說一下go中的字串類型:
字串就是一串固定長度的字元串連起來的字元序列。Go的字串是由單個位元組串連起來的。Go語言的字串的位元組使用UTF-8編碼標識Unicode文本。

  • Go語言的字串的位元組使用UTF-8編碼標識Unicode文本,這樣Golang統一使用UTF-8編碼,中文亂碼問題不會再困擾程式員。
  • 字串一旦賦值了,字串就不能修改了:在Go中字串是不可變的。

下面介紹字串的三種遍曆方式,根據實際情況選擇即可。

常規遍曆方式:

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

運行結果:

image

該遍曆方式==缺點==:遍曆是按照位元組遍曆,因此如果有中文等非英文字元,就會出現亂碼,比如要遍曆"abc北京"這個字串,效果如下:

image

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

for-range遍曆方式:

該方式是按照字元遍曆的,所以不會出現亂碼,如下:

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

運行結果:

image

可以看到第二個漢子“京”的開始下標是6,直接跳過了4和5,可見確實依照utf8編碼方式將三個位元組組合成了一個漢字,str[3]-str[5]組合成“北”字,str[6]-str[8]組合成了“京”字。
由於下標的不確定性,所以引出了下面的遍曆方式。

切片遍曆方式

1 可以先將字串轉成 []rune 切片
2 再用常規方法進行遍曆

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

運行效果:

image

由此可見下標是按1遞增的,沒有產生跳躍現象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.