ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] 包 strings 实现了简单的函数来操作 UTF-8 编码的字符串。 # 函数 ## Contains 变量s 包含有 变量substr 字符串。 ```go str := " kef ls jfelsewfe" fmt.Println(strings.Contains(str, "ls")) fmt.Println(strings.Contains(str, "lsfe")) // 运行结果 // true // false ``` ## Count 统计 变量substr 出现在 变量s 几次 ```go str := " kef ls jfelsewfe" fmt.Println(strings.Count(str, "ls")) // 运行结果 // 2 ``` ## Cut 根据字符串sep来分割字符串s,返回分割前半段,分割后半段,是否分割 ```go str := " kef ls jfelsewfe" b, a, ok := strings.Cut(str, "ls") if ok { fmt.Printf("before is %#v, after is %#v\n", b, a) } else { fmt.Println("sep not found.") } // 运行结果 // before is " kef ", after is " jfelsewfe" ``` ## HasPrefix、HasSuffix 根据字符串prefix来判断是否字符串s开头或结尾 ```go str := " kef ls jfelsewfe" fmt.Println(strings.HasPrefix(str, "kef")) fmt.Println(strings.HasPrefix(str, " kef")) fmt.Println(strings.HasSuffix(str, "ewfe")) // 运行结果 // false // true // true ``` ## Index 判断匹配字符第一次出现str的索引。未匹配到则返回-1 ```go str = "jewpw wef ce" // 返回第一次匹配到的索引(匹配整个字符) fmt.Println(strings.Index(str, "ls")) // 返回第一次匹配到的索引(任一个字符) fmt.Println(strings.IndexAny(str, "wef")) // 运行结果 // -1 // 1 ``` ## LastIndex 判断匹配字符最后一次出现str的索引。未匹配到则返回-1 ```go str = "jewpw wef cweoes" fmt.Println(strings.LastIndex(str, "we")) fmt.Println(strings.LastIndexAny(str, "we")) // 运行结果 // 11 // 14 ``` ## Join 字符串切片,切片中每个元素使用 sep 连接 ```go strSlice := []string{"jiax", "zeng"} fmt.Println(strings.Join(strSlice, "_")) // 运行结果 // jiax_zeng ``` ## Replace 替换字符串 ```go str = "jewpw wef cweoes" // 将字符串s匹配old的字符串,替换成new的字符串。替换次数 // 替换次数为 -1 ,则说明替换所有old匹配成功的字符串 fmt.Println(strings.Replace(str, "we", "xe", 1)) fmt.Println(strings.Replace(str, "we", "xe", -1)) // 将字符串s匹配old的字符串,替换成new的字符串(所有匹配成功) fmt.Println(strings.ReplaceAll(str, "we", "xe")) // 运行结果 // jewpw xef cweoes // jewpw xef cxeoes // jewpw xef cxeoes ``` ## Split 分割字符串 ```go str = "jiax_zeng_lin" // 根据分隔符sep来分割str数据(所有匹配成功都分割) fmt.Printf("%#v\n", strings.Split(str, "_")) // 根据分隔符sep来分割str数据,n是返回几个切片元素 // 是从前面开始分割的,-1 是分割所有匹配成功的 fmt.Printf("%#v\n", strings.SplitN(str, "_", 2)) fmt.Printf("%#v\n", strings.SplitN(str, "_", -1)) // 根据分隔符sep来分割str数据(所有匹配成功都分割),返回字符串切片包含分割符号 fmt.Printf("%#v\n", strings.SplitAfter(str, "_")) // 根据分隔符sep来分割str数据,n是返回几个切片元素 // 是从前面开始分割的,-1 是分割所有匹配成功的 // 返回字符串切片包含分割符号 fmt.Printf("%#v\n", strings.SplitAfterN(str, "_", 2)) fmt.Printf("%#v\n", strings.SplitAfterN(str, "_", -1)) // 运行结果 // []string{"jiax", "zeng", "lin"} // []string{"jiax", "zeng_lin"} // []string{"jiax", "zeng", "lin"} // []string{"jiax_", "zeng_", "lin"} // []string{"jiax_", "zeng_lin"} // []string{"jiax_", "zeng_", "lin"} ``` ## Title 将单词首字母大写 ```go str = "i love china" fmt.Println(strings.Title(str)) // 运行结果 // I Love China ``` ## ToLower、ToUpper 将字符串转换成大小写 ```go str = "my name is jiaxzeng, i love China." fmt.Println(strings.ToLower(str)) fmt.Println(strings.ToUpper(str)) // 运行结果 // my name is jiaxzeng, i love china. // MY NAME IS JIAXZENG, I LOVE CHINA. ``` ## Trim 切割字符串 ```go str = " jewpw wef cweoes " // 切割前后的字符串 fmt.Printf("%#v\n", strings.Trim(str, " ")) // 切割前后的空格、tab键、换行符 fmt.Printf("%#v\n", strings.TrimSpace(str)) // 切割前缀的字符串 fmt.Printf("%#v\n", strings.TrimPrefix(str, " ")) // 切割结尾的字符串 fmt.Printf("%#v\n", strings.TrimSuffix(str, " ")) // 运行结果 // "\tjewpw wef cweoes" // "jewpw wef cweoes" // "\tjewpw wef cweoes " // " \tjewpw wef cweoes" ``` # Reader 结构体 Reader 通过读取字符串来实现 io.Reader、io.ReaderAt、io.ByteReader、io.ByteScanner、io.RuneReader、io.RuneScanner、io.Seeker 和 io.WriterTo 接口。 Reader 的零值的操作类似于空字符串的 Reader。 ## NewReader NewReader 返回一个从 s 读取的新 Reader。 它类似于 bytes.NewBufferString 但更高效且只读。 ```go reader := strings.NewReader("jiaxzeng") fmt.Printf("type: %T\n", reader) // 运行结果 // type: *strings.Reader ``` ## Len Len 返回字符串未读部分的字节数。 ```go reader := strings.NewReader("jiaxzeng") fmt.Println(reader.Len()) // 运行结果 // 8 ``` ## Size Size 返回基础字符串的原始长度。 ```go reader := strings.NewReader("jiaxzeng") fmt.Println(reader.Size()) // 运行结果 // 8 ``` ## Read Read 读取 reader 的内容 ```go reader := strings.NewReader("jiaxzeng") buf := make([]byte, 4) for { n, err := reader.Read(buf) if err == io.EOF { break } fmt.Printf("read context: %v\n", string(buf[:n])) } // 运行结果 // read context: jiax // read context: zeng ``` 官网文档:https://pkg.go.dev/strings@go1.18.10