rune相當于go的char
package main
?
import (
"fmt"
"unicode/utf8"
)
?
func main() {
s := "豬豬是個笨!" //含有中文字符
?
fmt.Println(len(s)) // output: 18, len獲得的是字節(jié)數(shù),一個中文3個字節(jié)
fmt.Println("Rune conut: ", utf8.RuneCountInString(s) )
// output: Rune conut:6,所以可以使用 utf8.RuneCountInString(s)獲得字符數(shù)量
?
for _,b := range []byte(s) {
fmt.Printf("%X ", b) //UTF-8,英文1個字節(jié),中文3個字節(jié)
} // output: E7 8C AA E7 8C AA E6 98 AF E4 B8 AA E7 AC A8 EF BC 81
fmt.Println()
?
for i, ch := range s { // ch is a rune
fmt.Printf("(%d %X) ", i, ch)
} // output: (0 732A) (3 732A) (6 662F) (9 4E2A) (12 7B28) (15 FF01)
fmt.Println()
?
for i, ch := range s { // ch is a rune
fmt.Printf("(%d %c) ", i, ch)
} // output: (0 豬) (3 豬) (6 是) (9 個) (12 笨) (15 !) 直接使用range,返回的下標不是連續(xù)的
fmt.Println()
?
fmt.Println([]byte(s)) // []byte可以獲得所有的字節(jié)
// output: [231 140 170 231 140 170 230 152 175 228 184 170 231 172 168 239 188 129]
bytes := []byte(s)
for len(bytes) > 0 {
ch, size := utf8.DecodeRune(bytes)
bytes = bytes[size:]
fmt.Printf("%c ", ch)
} // output: 豬 豬 是 個 笨 !
fmt.Println()
?
// []rune會自己進行轉(zhuǎn)換,把準換好的東西放在一個數(shù)組中,再開一個rune slice出來
for i, ch := range []rune(s) {
fmt.Printf("(%d %c) ", i, ch )
} // output: (0 豬) (1 豬) (2 是) (3 個) (4 笨) (5 !)
fmt.Println()
?
}
strings包里含有多種字符串操作的函數(shù)
Fields(空格分割),Split,Join 字符串分割合并
Contains,Index 查找子串
ToLower,ToUpper
Trim,TrimRight,TrimLeft

示例