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...