Go語言入門2--字串詳解

來源:互聯網
上載者:User

標籤:字串   英文   ring   for   eve   檔案   需要   tmp   詳解   

 一、字串原理解析

1字串底層就是一個byte數組,所以可以和[]byte類型互相轉換;(字串可以存文本,也可以存二進位,因為其本來就是一個位元組流)

2.  字串之中的字元是不能修改的,字串是一個唯讀類型,不能直接修改,那怎麼修改呢(待解決(練習題中練習1有解決(轉換為位元組數組進行修改)))?

樣本如下:

我們可以發現已經飄紅了,並有英文提示不能修改字串中的字元。

說明Go語言中字串是一個唯讀的類型,並不能直接修改。

3. 字串是由byte位元組組成,所以字串的長度是byte位元組的長度,byte是一個int8別名

樣本見樣本1-1

4. rune類型用來表示utf8字元,一個rune字元由1個或多個byte組成,rune是一個int32的別名

 

補充:

1) 字元與位元組關係?

答:如果是英文字元,1個字元對應1個byte(位元組),如果是中文字元,1個字元對應2個,甚至是3個、4個byte;

2)  UTF8編碼?

答:utf8針對最大的好處是,其實可變的,如果是英文字元,其就給1個byte,如果是中文就根據其需要的給定指定的字元個數,這對於網路頻寬的節省是很重要的。

3)  rune類型其實就是int32類型;

執行個體1-1
//聲明array.go檔案屬於 main包package main//引入其他的包 fmt是系統的標準輸入輸出庫import ("fmt")//入口執行函數,main包必須有一個main函數,這個在go語言中是強制的func main() {//聲明一個str變數 類型為 string  字串var str string //方法二 str := "string" 等str = "abc漢子"//聲明一個byte數組也可以叫位元組數組都是一個意思var b []byte = []byte(str)     //方法二 b :=[]byte(str)  //將str強制轉換為位元組數組([]byte)var chars []rune = []rune(str) //將str轉換為rune數組([]rune)//格式化列印b的值和b位元組數組的長度fmt.Printf("b =%v,len(str)=%d\n", b, len(str))fmt.Printf("%c\n", 97)fmt.Printf("chars=%v,chars count:%d\n", chars, len(chars))}

執行結果如下:

d:\PROJECT\src\base-3\array-1>go run array.gob =[97 98 99 230 177 137 229 173 144],len(str)=9achars=[97 98 99 27721 23376],chars count:5

解釋:

1) 輸出的就是ASCII碼(字元,不論是英文還是中文在底層儲存的都是一個整數ASCII碼),97對應的就是a;

2) 由執行個體看到一個"漢"字由三個位元組組成,對應的ASCII碼為230 177 137;

3) str字串的長度為9,因為底層儲存的是位元組數組,可以看到輸出9個位元組,所以長度為9,而不是表面我們數的5個(字元是5個);

4) chars count:5 表示str字元的長度為5(我們需要將字串(預設是ASCII編碼)轉換為rune類型進行計算)

5)chars =[97 98 99 27721 23376]:表示的是str字串各個字元對應在底層的utf8編碼

二、練習題

練習1:寫一個程式,對英文字串進行逆序

方法1:複雜寫法

package mainimport ("fmt")func main() {var str string = "abcdefg"bytes := []byte(str) //字串中的字元不能直接修改,所以我們這裡轉成byte數組//var i int//i = 0//var i = 0for i := 0; i < len(bytes)/2; i++ { //要除以2,因為一次迴圈做2次操作//fmt.Printf("%c ", str[i]) //列印出來的是字串中的位元組數組//通過將第一個和最後一個進行交換實現逆序var tmp = bytes[i]               //將前一個賦值為一個臨時變數bytes[i] = bytes[len(bytes)-i-1] //將前一個賦值為後一個bytes[len(bytes)-i-1] = tmp      //將後一個賦值為前一個}str = string(bytes) //將byte數群組轉換為字串fmt.Printf("reverse string:%s\n", str)}

執行結果:

d:\PROJECT\src\day1\day-1\base-3\array-2>go run main.goreverse string:gfedcba

方法2:進階寫法

package mainimport (    "fmt")func main() {    var str string = "abcdefg"    bytes := []byte(str)    for i := 0; i < len(bytes)/2; i++ {        bytes[i], bytes[len(bytes)-i-1] = bytes[len(bytes)-i-1], bytes[i]  //兩個變數拿起來直接交換即可    }    str = string(bytes) //將byte數群組轉換為字串    fmt.Printf("reverse string:%s\n", str)}

  

  

  

  

 

  

  

Go語言入門2--字串詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.