Go語言中字符串的使用方法 原

主要講解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()
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章