字符和字符串处理
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 浮点型