Go語言基礎 實戰 6 字串

2021-10-05 13:53:28 字數 2002 閱讀 3860

1. 什麼是字串?

在go中字串是byte陣列。可以通過將內容放在 " "之間的方式來建立乙個字串。如下:

s := "i am string"
go中的字串符合unicode標準,並以utf-8編碼。

2. 訪問字串中的位元組、遍歷

因為字串實際上是byte陣列,所以可以通過下標訪問乙個字串的單個位元組,也可以遍歷。如下:

str := "hello world"

for i, v := range str

for i:=0; i3. 通過byte切片來建立字串

注意:陣列不可以用來建立字串。 

// 通過byte切片建立字串

byteslice := byte // 這裡用對應的十進位制數同樣ok

str := string(byteslice) // 這裡如果傳的是陣列,而不是切片,會報錯

4. 潛在的隱患 -- 列印輸出

str := "señor"

for i:=0; i由於 ñ 的unicode碼點是 u+00f1,它的utf-8編碼佔了兩個位元組。所以試圖將兩個字元當做乙個字元來打是錯誤的。這時候可以用rune來解決這個問題,它是go中的一種字元型別。

5. 字元型別

在go語言中支援兩種字元型別:

-- byte:代表單個utf-8字串的位元組

-- rune:代表單個unicode的字元

現在用rune型別對上面的**進行修改:

//rune解決隱患

str := "señor"

str_rune := rune(str)

for i:=0; i對於字串str,獲取它的長度:

//字串長度

str := "señor"

fmt.println("length of utf-8:", utf8.runecountinstring(str)) //輸出結果為:length of utf-8: 5

fmt.println("length of byte:", len(str)) //輸出結果為:length of byte: 6

可以看到,如果字串中有這種實際佔了兩個位元組的字元,那麼就要用rune來處理了,否則會出錯。

6. 修改字串的值

不可以通過下標來修改字串中的字元,因為建立的字串是不可變的。

但可以將字串變數整個重新賦值:

str := "hello world"

//str[0] = 'y' // 非法

str = "yello world" // 正確

如果有需要改變乙個字串中單個字元的需求,通過rune來實現:

//通過rune修改字串

str := "hello world"

new_str := rune(str)

new_str[0] = 'y'

str = string(new_str)

fmt.println(str)

7. 擷取字串

擷取英文的字串:

//擷取字串

sourcestr := "xhelloworldx"

str := sourcestr[1:len(sourcestr)-1] //輸出結果為:helloworld (開始的下標,結束的後一位的下標)

fmt.println(str)

如果是中文,還是用rune:

//擷取字串--中文

source := "ab我透你cd"

str := string(rune(source)[2:5])

fmt.println(str) //輸出結果為:我透你

Go語言基礎之2 字串詳解

1.字串底層就是乙個byte陣列,所以可以和byte型別互相轉換 字串可以存文字,也可以存二進位制,因為其本來就是乙個位元組流 2.字串之中的字元是不能修改的,那怎麼修改呢 待解決 練習題中練習1有解決 換為位元組陣列進行修改 示例如下 我們可以發現已經飄紅了,並有英文提示不能修改字串中的字元。說明...

6 字串函式

strcpy函式char strcpy char dest,const char src 功能 把src所指向的字串覆蓋複製到dest。返回值 dest指向的字串。注意 字串src的長度不能超過dest,否則會溢位。strncpy函式char strncpy char dest,const char...

6 字串拼接

字串相加 alert hello world hello world 數值字串相加 alert 100 100 100100 數值字串 數值 alert 11 12 1112口訣 數值相加,字元相連 var age 18 console.log pink老師age歲啦 這樣不行 console.lo...