strings
最后更新于:2022-04-02 02:46:03
[TOC]
## 语法
### Func
```
// 比较 a 是否大于 b
func Compare(a, b string) int
func Contains(s, substr string) bool
// chars 中包含任何一个char 都算
func ContainsAny(s, chars string) bool
func ContainsRune(s string, r rune) bool
// substr 出现的次数
func Count(s, substr string) int
// 判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同
func EqualFold(s, t string) bool
// 切割空格
func Fields(s string) []string
func FieldsFunc(s string, f func(rune) bool) []string
// 匹配前缀或后缀
func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool
// 首次出现的位置
func Index(s, substr string) int
func IndexAny(s, chars string) int
func IndexByte(s string, c byte) int
func IndexFunc(s string, f func(rune) bool) int
func IndexRune(s string, r rune) int
// 最后一次出现的位置
func LastIndex(s, substr string) int
func LastIndexAny(s, chars string) int
func LastIndexByte(s string, c byte) int
func LastIndexFunc(s string, f func(rune) bool) int
// 切片转字符串
func Join(elems []string, sep string) string
func Map(mapping func(rune) rune, s string) string
// 重复生成字符
func Repeat(s string, count int) string
// 替换字符串
func Replace(s, old, new string, n int) string
func ReplaceAll(s, old, new string) string
// 切割字符串转数组
func Split(s, sep string) []string
// 如 "a,b,c" -> ["a,","b,","c"]
func SplitAfter(s, sep string) []string
func SplitAfterN(s, sep string, n int) []string
// n 表示生成几个切片
func SplitN(s, sep string, n int) []string
// 首字母大写
func Title(s string) string
func ToLower(s string) string
func ToLowerSpecial(c unicode.SpecialCase, s string) string
// 多数情况与 ToUpper 相同但在处理某些unicode编码字符则不同
func ToTitle(s string) string
func ToTitleSpecial(c unicode.SpecialCase, s string) string
func ToUpper(s string) string
func ToUpperSpecial(c unicode.SpecialCase, s string) string
func ToValidUTF8(s, replacement string) string
func Trim(s, cutset string) string
func TrimFunc(s string, f func(rune) bool) string
func TrimLeft(s, cutset string) string
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimPrefix(s, prefix string) string
func TrimRight(s, cutset string) string
func TrimRightFunc(s string, f func(rune) bool) string
func TrimSpace(s string) string
```
### Type
```
// 实现 Writer 接口
type Builder
func (b *Builder) Cap() int
func (b *Builder) Grow(n int)
func (b *Builder) Len() int
func (b *Builder) Reset()
func (b *Builder) String() string
func (b *Builder) Write(p []byte) (int, error)
func (b *Builder) WriteByte(c byte) error
func (b *Builder) WriteRune(r rune) (int, error)
func (b *Builder) WriteString(s string) (int, error)
// 实现 reader 接口
type Reader
func NewReader(s string) *Reader
func (r *Reader) Len() int
func (r *Reader) Read(b []byte) (n int, err error)
func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
func (r *Reader) ReadByte() (byte, error)
func (r *Reader) ReadRune() (ch rune, size int, err error)
func (r *Reader) Reset(s string)
func (r *Reader) Seek(offset int64, whence int) (int64, error)
func (r *Reader) Size() int64
func (r *Reader) UnreadByte() error
func (r *Reader) UnreadRune() error
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
type Replacer
func NewReplacer(oldnew ...string) *Replacer
func (r *Replacer) Replace(s string) string
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
```
## 实例
### strings.Fields 切割并过滤多余空格
```
s := " fooasd ads asd bar baz "
fmt.Printf("%+v\n", strings.Split(s, " ")) // [ fooasd ads asd bar baz ]
fmt.Printf("%+v\n", strings.Fields(s)) // ["fooasd" "ads" "asd" "bar" "baz"]
```
### strings.FieldsFunc
```
s := "ab*cd*ef"
result := strings.FieldsFunc(s, func(c rune) bool {
return c == '*'
})
fmt.Printf("%+v\n", result) // [ab cd ef]
```
### strings.Map
```
res := strings.Map(func(r rune) rune {
return r + 1
}, "abc 好")
fmt.Printf("%+v\n", res) // bcd!奾
```
### strings.TrimFunc
```
s := strings.TrimFunc("ab a ca", func(r rune) bool {
return r == 'a'
})
fmt.Printf("%+v\n", s) // b a c
```
### NewReplacer 声明替换规则.并使用此模式进行替换
```
rep := strings.NewReplacer("<", "<", ">", ">")
fmt.Printf("%+v\n", rep.Replace("This is HTML!")) // This is <b>HTML</b>!
```
### strings.NewReader()
```
reader := strings.NewReader("你好abc")
p := make([]byte, 6)
fmt.Println(reader.Read(p)) //你好
fmt.Println(reader.Len()) //3
fmt.Println(reader.Size()) //9
fmt.Printf("%s", p)
```
';