主要講解Go語言中字符串的使用方法
知識點:
- 使用range遍歷字符串,獲取到的是字節,無法獲取中文字符,驗證了在UTF-8編碼中 一個漢字佔三個字節
- 使用 utf8.RuneCountInString(s)) 獲取字符串長度,可以正常解析中文,一箇中文被當做一個字符。
- 使用 len(string) 獲取字節的長度
- 使用 []byte(s) 獲取字節
- 使用 []rune(s) 獲取字符,可對中文進行轉換
以下爲代碼示例:
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
//默認情況下,Go使用UTF-8編碼,此編碼下,一箇中文漢字佔3個字節
//GBK、GB2312收編的漢字佔2個字節,
// 嚴格地用iso8859-1無法表示漢字,只能轉爲問號。
s := "Yes我愛我家!" // UTF-8
fmt.Println(s)
for _, b := range []byte(s) {
fmt.Printf("%X ", b)
//59 65 73 E6 88 91 E7 88 B1 E6 88 91 E5 AE B6 21
}
fmt.Println()
//下面這種遍歷方式 是按字節 來進行計算的
for i, ch := range s { // ch is a rune
// 會將字符轉換爲 unicode 編碼,unicode中一個 漢字長度爲兩個字節
fmt.Printf("(%d %X) ", i, ch)
}
fmt.Println()
//將字符串的每一個字符轉爲 rune ,會達到預期效果
fmt.Println("Rune count:",
utf8.RuneCountInString(s)) //Rune count: 8
bytes := []byte(s)
for len(bytes) > 0 {
ch, size := utf8.DecodeRune(bytes)
bytes = bytes[size:]
fmt.Printf("%c ", ch) //Y e s 我 愛 我 家 !
}
fmt.Println()
for i, ch := range []rune(s) {
fmt.Printf("(%d %c) ", i, ch)
//(0 Y) (1 e) (2 s) (3 我) (4 愛) (5 我) (6 家) (7 !)
}
fmt.Println()
}