天天看點

Go學習——10.字元和字元串字元和字元串處理

字元和字元串處理

rune相當于go的char

package main
import (
	"fmt"
	"utf8"
)
func main() {
	s := "Yes我愛慕課網!"
	fmt.Printf("%s\n", []byte(s)) // 檢視s的字元串内容,結果為"Yes我愛慕課網!"
	fmt.Printf("%X\n", []byte(s)) // 檢視s的原始的位元組,結果為"596573E68891E788B1E68595E8AFBEE7BD9121"
	// 列印下每個字元的原始位元組
	for _, v := range []byte(s) {
		fmt.Printf("%X ", v) // 依次列印出utf-8編碼 59 65 73 E6 88 91 E7 88 B1 E6 85 95 E8 AF BE E7 BD 91 21
	}
	fmt.Println("\n")
	for i, ch := range s {
		fmt.Printf("(%d %X)\n", i, ch)
		/*
			依次列印出Unicode編碼:
			(0 59)
			(1 65)
			(2 73)
			(3 6211)
			(6 7231)
			(9 6155)
			(12 8BFE)
			(15 7F51)
			(18 21)
		
		*/
	}
	fmt.Println("\n")
	fmt.Println(len(s)) // 19

	// 有一個庫叫utf8
	// 檢視字元串長度
	fmt.Println("Rune count:", utf8.RuneCountInString(s)) // 9
	// 将編碼轉成字元串
	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 := []rune(s) {
		fmt.Printf("(%d %c) ", i, ch) // 分别列印出(0 Y) (1 e) (2 s) (3 我) (4 愛) (5 慕) (6 課) (7 網) (8 !)
	}
	fmt.Println()
}
           
  • 總結
    • 使用range可以周遊[]rune(s),結果就是索引和對應的字元
    • 使用utf8.RuneCountInString(s)擷取字元串長度
    • 使用len獲得位元組長度
    • 使用[]byte獲得位元組

字元串的操作

都在strings這個包裡面
  • strings.HasPrefix(s, prefix string) bool 是否以prefixString開頭,傳回布爾值
  • strings.HasSuffix(s, suffix string) bool 是否以prefixString結尾,傳回布爾值
  • strings.Fields(s) 根據空格分割,傳回對應的slice
  • strings.Split(s, sep) 用指定的字元來對字元串進行分割,傳回一個slice
  • strings.Join(s1 []string, sep string)string 用于将 元素類型為string的slice使用分隔符拼接為一個字元串
  • strings.Contains(s, str string) bool 查找子串,傳回布爾值
  • strings.Index(s, str string) int 從前往後查找字元串strString是否在字元串s中,如果存在傳回首次出現的索引,不存在傳回-1
  • strings.LastIndex(s, str string) int 從後往前查找字元串strString是否在字元串s中,如果存在傳回首次出現的索引,不存在傳回-1
  • strings.IndexRune(s string, rRune) int 查找丹哥字元在字元串s中的位置,傳回首次出現的索引
  • strings.Replace(str, old, new, n) string ?????????
  • string.Count(s, str string) int 統計字元串在s總出現的次數
  • strings.Repeat(s, count int ) string Repeat用于重讀count字元串s并傳回新的字元串 ????
  • strings.ToLower(s) string 字元串中的字元全部轉換為相應的小寫字元
  • strings.ToUpper(s) string 将字元串中字元全部轉換為相應的大寫字元
  • strings.Trim(s, “cut”): 去除開頭和結尾的cut字元串
  • strings.TrimRight(s, “cut”): 去除結尾的cut字元串
  • strings.TrimLeft(s, “cut”): 去除開頭的cut字元串
  • strings.TrimSpace(s) 去除字元串s兩端的空白字元
  • 其他
    • 擷取程式運作的作業系統所占的位數 strconv.IntSize
    • 數字類型轉換為字元串類型
      • strconv.Itoa(i int) string 傳回i對應的字元串的十進制數
      • strconv.FormatFloat(f float64) string: 将64位浮點型轉換為字元串
    • 字元串轉換為數字類型
      • strconv.Atoi(s string)(i int, err error): 将字元串轉換為int類型
      • strconv.ParseFloat(s string)(f float64, err error): 将字元串類型轉化為64 浮點型