字元和字元串處理
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 浮點型