概述
索引
- func Contains(s, substr string) bool
- func ContainsRune(s string, r rune) bool
- func EqualFold(s, t string) bool
- func FieldsFunc(s string, f func(rune) bool) []string
- func HasSuffix(s, suffix string) bool
- func IndexAny(s, chars string) int
- func IndexFunc(s string, f func(rune) bool) int
- func Join(a []string, sep string) string
- func LastIndexAny(s, chars string) int
- func LastIndexFunc(s string, f func(rune) bool) int
- func Repeat(s string, count int) string
- func Split(s, sep string) []string
- func SplitAfterN(s, sep string, n int) []string
- func Title(s string) string
- func ToLowerSpecial(c unicode.SpecialCase, s string) string
- func ToTitleSpecial(c unicode.SpecialCase, s string) string
- func ToUpperSpecial(c unicode.SpecialCase, s string) string
- func TrimFunc(s string, f func(rune) bool) string
- func TrimLeftFunc(s string, f func(rune) bool) string
- func TrimRight(s string, cutset string) string
- func TrimSpace(s string) string
- type Builder
- Builder
- Contains
- ContainsRune
- EqualFold
- FieldsFunc
- HasSuffix
- IndexAny
- IndexFunc
- Join
- LastIndexAny
- LastIndexFunc
- NewReplacer
- Replace
- SplitAfter
- SplitN
- ToLower
- ToTitle
- ToUpper
- Trim
- TrimLeft
- TrimPrefix
- TrimRightFunc
- TrimSuffix
文件
func Compare
Compare 根据字典顺序比较字符串 a 和 b。a == b 时返回 0,a < b 时返回 -1,a > b 时返回 +1。
Compare 主要为了和 bytes 包对应,通常使用内置的比较运算符(==,<,>)效率更高。
例:
fmt.Println(strings.Compare(“a”, “b”))
fmt.Println(strings.Compare(“a”, “a”))
fmt.Println(strings.Compare(“b”, “a”))
// Output:
// -1
// 0
// 1
func
¶
- func Contains(s, substr ) bool
Contains 判断 s 是否包含子串 substr。
例:
fmt.Println(strings.Contains(“seafood”, “foo”))
fmt.Println(strings.Contains(“seafood”, “bar”))
fmt.Println(strings.Contains(“seafood”, “”))
fmt.Println(strings.Contains(“”, “”))
// Output:
// true
// false
// true
// true
func ContainsAny
- func ContainsAny(s, chars string)
ContainsAny 判断 s 是否包含 chars 中的任意 Unicode 代码点。
例:
fmt.Println(strings.ContainsAny(“team”, “i”))
fmt.Println(strings.ContainsAny(“failure”, “u & i”))
fmt.Println(strings.ContainsAny(“foo”, “”))
fmt.Println(strings.ContainsAny(“”, “”))
// Output:
// false
// true
// false
// false
func
¶
- func ContainsRune(s , r rune)
ContainsRune 判断 s 是否包含 Unicode 代码点 r。
例:
// Finds whether a string contains a particular Unicode code point.
// The code point for the lowercase letter “a”, for example, is 97.
fmt.Println(strings.ContainsRune(“aardvark”, 97))
fmt.Println(strings.ContainsRune(“timeout”, 97))
// Output:
// true
// false
func
¶
- func Count(s, substr ) int
Count 获取在 s 中非重叠出现 substr 的次数。如果 substr 为空,则返回 s 中的 Unicode 代码点数量加一。
例:
fmt.Println(strings.Count(“cheese”, “e”))
fmt.Println(strings.Count(“five”, “”)) // before & after each rune
// Output:
// 3
// 5
func EqualFold
EqualFold 判断 s 和 t 在忽略大小写的情况下是否相等。
例:
fmt.Println(strings.EqualFold(“Go”, “go”))
// Output: true
func
¶
- func Fields(s ) []string
Fields 根据空白字符(Go 中通过 unicode.IsSpace 判断是否为空白字符)分割字符串并将结果以切片形式返回。当 s 只包含空白字符时返回值为空。
例:
fmt.Printf(“Fields are: %q”, strings.Fields(“ foo bar baz “))
// Output: Fields are: [“foo” “bar” “baz”]
func FieldsFunc
FieldsFunc 根据满足函数 f(c) 的 Unicode 代码点 c 分割字符串。当 s 中所有的字符都满足 f(c) 函数或 s 为空时返回空。FieldsFunc 不保证 f(c) 的调用顺序,如果指定的 c 调用 f 返回结果不一致函数会崩溃。
例:
f := func(c rune) bool {
return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Printf(“Fields are: %q”, strings.FieldsFunc(“ foo1;bar2,baz3…”, f))
// Output: Fields are: [“foo1” “bar2” “baz3”]
func
¶
- func HasPrefix(s, prefix ) bool
HasPrefix 判断 s 是否以 prefix 为前缀。
例:
fmt.Println(strings.HasPrefix(“Gopher”, “Go”))
fmt.Println(strings.HasPrefix(“Gopher”, “C”))
fmt.Println(strings.HasPrefix(“Gopher”, “”))
// Output:
// true
// false
// true
func HasSuffix
- func HasSuffix(s, suffix string)
HasSuffix 判断 s 是否以 suffix 为后缀。
例:
fmt.Println(strings.HasSuffix(“Amigo”, “go”))
fmt.Println(strings.HasSuffix(“Amigo”, “O”))
fmt.Println(strings.HasSuffix(“Amigo”, “Ami”))
fmt.Println(strings.HasSuffix(“Amigo”, “”))
// Output:
// true
// false
// false
// true
func
¶
- func Index(s, substr ) int
Index 返回 s 中 substr 第一次出现的位置,如果没有返回 -1。
例:
fmt.Println(strings.Index(“chicken”, “ken”))
fmt.Println(strings.Index(“chicken”, “dmr”))
// Output:
// 4
// -1
func IndexAny
- func IndexAny(s, chars string)
IndexAny 返回 s 中 chars 中任意 Unicode 代码点第一次出现的位置,如果没有返回 -1。
例:
fmt.Println(strings.IndexAny(“chicken”, “aeiouy”))
fmt.Println(strings.IndexAny(“crwth”, “aeiouy”))
// Output:
// 2
// -1
func
¶
- func IndexByte(s , c byte)
IndexByte 返回 s 中 c 字节第一次出现的位置,如果没有返回 -1。
例:
fmt.Println(strings.IndexByte(“golang”, ‘g’))
fmt.Println(strings.IndexByte(“gophers”, ‘h’))
fmt.Println(strings.IndexByte(“golang”, ‘x’))
// Output:
// 0
// 3
// -1
IndexFunc 返回 s 中满足 f(c) 函数的 Unicode 代码点第一次出现的位置,如果没有返回 -1。
例:
f := func(c rune) bool {
return unicode.Is(unicode.Han, c)
}
fmt.Println(strings.IndexFunc(“Hello, 世界”, f))
fmt.Println(strings.IndexFunc(“Hello, world”, f))
// Output:
// 7
// -1
func IndexRune
IndexRune 返回 s 中 r 第一次出现的位置。如果没有返回 -1。当 r 是 utf8.RuneError 时返回无效 UTF-8 字节序列第一次出现的位置。
例:
fmt.Println(strings.IndexRune(“chicken”, ‘k’))
fmt.Println(strings.IndexRune(“chicken”, ‘d’))
// Output:
// 4
// -1
func Join
Join 将 a 中所有元素用 sep 连接并返回。
例:
s := []string{“foo”, “bar”, “baz”}
fmt.Println(strings.Join(s, “, “))
// Output: foo, bar, baz
func LastIndex
- func LastIndex(s, substr string)
LastIndex 返回 s 中最后一次出现 sustr 时的位置,如果没有返回 -1。
例:
fmt.Println(strings.Index(“go gopher”, “go”))
fmt.Println(strings.LastIndex(“go gopher”, “go”))
fmt.Println(strings.LastIndex(“go gopher”, “rodent”))
// Output:
// 0
// 3
// -1
func
¶
- func LastIndexAny(s, chars ) int
LastIndexAny 返回 s 中最后一次出现 chars 中 Unicode 代码点时的位置,如果没有返回 -1。
例:
fmt.Println(strings.LastIndexAny(“go gopher”, “go”))
fmt.Println(strings.LastIndexAny(“go gopher”, “rodent”))
fmt.Println(strings.LastIndexAny(“go gopher”, “fail”))
// Output:
// 4
// 8
// -1
func LastIndexByte
LastIndexByte 返回 s 中最后一次出现 c 字节时的位置,如果没有返回 -1。
例:
fmt.Println(strings.LastIndexByte(“Hello, world”, ‘l’))
fmt.Println(strings.LastIndexByte(“Hello, world”, ‘o’))
fmt.Println(strings.LastIndexByte(“Hello, world”, ‘x’))
// Output:
// 10
// 8
// -1
func LastIndexFunc
LastIndexFunc 返回 s 中最后一个满足 f(c) 函数的 Unicode 代码点的位置,如果没有返回 -1。
例:
fmt.Println(strings.LastIndexFunc(“go 123”, unicode.IsNumber))
fmt.Println(strings.LastIndexFunc(“123 go”, unicode.IsNumber))
fmt.Println(strings.LastIndexFunc(“go”, unicode.IsNumber))
// Output:
// 5
// 2
// -1
func
¶
Map 为 s 中的每个字符应用回调函数 mapping 并返回处理结果。如果 mapping 返回一个负值该字符将会被丢弃。
例:
rot13 := func(r rune) rune {
switch {
case r >= ‘A’ && r <= ‘Z’:
return ‘A’ + (r-‘A’+13)%26
case r >= ‘a’ && r <= ‘z’:
return ‘a’ + (r-‘a’+13)%26
}
return r
}
fmt.Println(strings.Map(rot13, “‘Twas brillig and the slithy gopher…”))
// Output: ‘Gjnf oevyyvt naq gur fyvgul tbcure…
func Repeat
Repeat 把 s 重复 count 次并返回结果。当 count 是负数或者 len(s) count 溢出函数会 panic。
例:
fmt.Println(“ba” + strings.Repeat(“na”, 2))
// Output: banana
func Replace
Replace 把 s 中的前 n 个非重叠的 old 替换为 new 并返回结果。如果 old 为空将会替换 UTF-8 代码点的前/后位置(例:长度为 k 的 UTF-8 字符串将被应用 k+1 次替换)。当 n < 0 时不会限制次数。
例:
fmt.Println(strings.Replace(“oink oink oink”, “k”, “ky”, 2))
fmt.Println(strings.Replace(“oink oink oink”, “oink”, “moo”, -1))
// Output:
// oinky oinky oink
// moo moo moo
func Split
Split 将 s 根据 sep 分割并以切片形式返回。
如果 s 中不包含 sep 并且 sep 不为空 Split 会把 s 作为切片元素返回(长度为 1)。
如果 sep 为空,将分割每个 UTF-8 字符。如果 s 和 sep 都为空 Split 会返回空切片。
Split 和 SplitN(-1) 是等价的。
例:
fmt.Printf(“%q\n”, strings.Split(“a,b,c”, “,”))
fmt.Printf(“%q\n”, strings.Split(“a man a plan a canal panama”, “a “))
fmt.Printf(“%q\n”, strings.Split(“ xyz “, “”))
fmt.Printf(“%q\n”, strings.Split(“”, “Bernardo O’Higgins”))
// Output:
// [“a” “b” “c”]
// [“” “man “ “plan “ “canal panama”]
// [“ “ “x” “y” “z” “ “]
// [“”]
func
¶
- func SplitAfter(s, sep ) []string
SplitAfter 从每个 sep 后面分割 s 并以切片形式返回。
如果 s 中不包含 sep 并且 sep 不为空 SplitAfter 会把 s 作为切片元素返回(长度为 1)。
如果 sep 为空则分割每个 UTF-8 字符。如果 s 和 sep 都为空 SplitAfter 会返回空切片。
SplitAfter 和 SplitAfterN(-1) 是等价的。
例:
fmt.Printf(“%q\n”, strings.SplitAfter(“a,b,c”, “,”))
// Output: [“a,” “b,” “c”]
func SplitAfterN
SplitAfterN 从每个 sep 后面分割 s 并以切片形式返回。
参数 n 决定函数的返回值:
n > 0: 最多分割出 n 个子串; 最后一个子串不会再被分割
n == 0: 返回值为 nil
n < 0: 不限制分割后的子串数量
对于 s 和 sep 的边缘情况处理与 SplitAfter 相同。
例:
fmt.Printf(“%q\n”, strings.SplitAfterN(“a,b,c”, “,”, 2))
// Output: [“a,” “b,c”]
func SplitN
Split 将 s 根据 sep 分割并返回。
参数 n 决定函数的返回值:
n > 0: 最多分割出 n 个子串; 最后一个子串不会再被分割
n == 0: 返回值为 nil
n < 0: 不限制分割后的子串数量
对于 s 和 sep 的边缘情况处理与 Split 相同。
例:
fmt.Printf(“%q\n”, strings.SplitN(“a,b,c”, “,”, 2))
z := strings.SplitN(“a,b,c”, “,”, 0)
fmt.Printf(“%q (nil = %v)\n”, z, z == nil)
// Output:
// [“a” “b,c”]
// [] (nil = true)
func Title
- func Title(s string)
Title 把 s 中每个单词的首字母转换成 Title 形式并返回。
BUG(rsc): Title 使用的判断字边界的规则会忽略 Unicode 标点符号。
例:
fmt.Println(strings.Title(“her royal highness”))
// Output: Her Royal Highness
func
¶
- func ToLower(s ) string
ToLower 将 s 中的所有 Unicode 字符转换成小写。
例:
fmt.Println(strings.ToLower(“Gopher”))
// Output: gopher
ToLowerSpecial 根据 c 指定的优先规则将 s 中的所有 Unicode 代码点转换为小写。
例:
fmt.Println(strings.ToLowerSpecial(unicode.TurkishCase, “Önnek İş”))
// Output: önnek iş
func
¶
- func ToTitle(s ) string
ToTile 将 s 中的所有 Unicode 字符转换成 Title 形式。
例:
fmt.Println(strings.ToTitle(“loud noises”))
fmt.Println(strings.ToTitle(“хлеб”))
// Output:
// LOUD NOISES
// ХЛЕБ
func ToTitleSpecial
ToTitleSpecial 根据 c 指定的优先规则将 s 中的所有 Unicode 代码点转换成 Title 形式。
例:
fmt.Println(strings.ToTitleSpecial(unicode.TurkishCase, “dünyanın ilk borsa yapısı Aizonai kabul edilir”))
// Output:
// DÜNYANIN İLK BORSA YAPISI AİZONAİ KABUL EDİLİR
func
¶
- func ToUpper(s ) string
ToUpper 将 s 中所有的 Unicode 字符转换成大写。
例:
fmt.Println(strings.ToUpper(“Gopher”))
// Output: GOPHER
func ToUpperSpecial
ToUpperSpecial 根据 c 指定的优先规则将 s 中的所有字符转换成大写。
例:
fmt.Println(strings.ToUpperSpecial(unicode.TurkishCase, “örnek iş”))
// Output: ÖRNEK İŞ
func
¶
- func Trim(s , cutset string)
Trim 去掉 s 头部和尾部所有 cutset 中的 Unicode 代码点。
例:
fmt.Print(strings.Trim(“¡¡¡Hello, Gophers!!!”, “!¡”))
// Output: Hello, Gophers
func
¶
TrimFunc 去掉 s 头部和尾部所有满足 f(c) 的 Unicode 代码点。
例:
fmt.Print(strings.TrimFunc(“¡¡¡Hello, Gophers!!!”, func(r rune) bool {
return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))
// Output: Hello, Gophers
func TrimLeft
TrimLeft 去掉 s 头部所有 cutset 中的 Unicode 代码点。
例:
fmt.Print(strings.TrimLeft(“¡¡¡Hello, Gophers!!!”, “!¡”))
// Output: Hello, Gophers!!!
func TrimLeftFunc
TrimLeftFunc 去掉 s 头部所有满足 f(c) 的 Unicode 代码点。
例:
fmt.Print(strings.TrimLeftFunc(“¡¡¡Hello, Gophers!!!”, func(r rune) bool {
return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))
// Output: Hello, Gophers!!!
func
¶
- func TrimPrefix(s, prefix ) string
TrimPrefix 去掉 s 的 prefix 前缀。如果 s 不以 prefix 作为前缀则直接返回。
例:
var s = “¡¡¡Hello, Gophers!!!”
s = strings.TrimPrefix(s, “¡¡¡Hello, “)
s = strings.TrimPrefix(s, “¡¡¡Howdy, “)
fmt.Print(s)
// Output: Gophers!!!
func TrimRight
TrimRignt 去掉 s 尾部所有 cutset 中的 Unicode 代码点。
例:
fmt.Print(strings.TrimRight(“¡¡¡Hello, Gophers!!!”, “!¡”))
// Output: ¡¡¡Hello, Gophers
func TrimRightFunc
TrimRightFunc 去掉字符串 s 尾部满足 f(c) 函数的 Unicode 代码点。
例:
fmt.Print(strings.TrimRightFunc(“¡¡¡Hello, Gophers!!!”, func(r rune) bool {
return !unicode.IsLetter(r) && !unicode.IsNumber(r)
}))
// Output: ¡¡¡Hello, Gophers
func
¶
- func TrimSpace(s ) string
TrimSpace 去掉字符串 s 两边的空格。
例:
fmt.Println(strings.TrimSpace(“ \t\n Hello, Gophers \n\t\r\n”))
// Output: Hello, Gophers
func TrimSuffix
- func TrimSuffix(s, suffix string)
TrimSuffix 去掉字符串 s 中的指定后缀 suffix。如果 s 不是以 suffix 结尾返回原字符串。
例:
var s = “¡¡¡Hello, Gophers!!!”
s = strings.TrimSuffix(s, “, Gophers!!!”)
s = strings.TrimSuffix(s, “, Marmots!!!”)
fmt.Print(s)
// Output: ¡¡¡Hello
type
¶
- type Builder struct {
// contains filtered or unexported fields
}
Builder 可以使用 Write 高效的创建字符串。他会把内存拷贝降到最低程度。可以直接使用 Builder 的零值。不要复制一个非零的 Builder。
例:
var b strings.Builder
for i := 3; i >= 1; i— {
fmt.Fprintf(&b, “%d…”, i)
}
b.WriteString(“ignition”)
fmt.Println(b.String())
// Output: 3…2…1…ignition
func (Builder) Grow
- func (b Builder) Grow(n )
Grow 会增加 b 的容量确保他有足够的空间容纳 n 字节。在调用 Grow(n) 后,至少向 b 中写入 n 字节时不会重新分配内存。如果 n 为负数,Grow 会 panic。
func (Builder) Len
- func (b Builder) Len()
Len 返回已经写入的字节;b.Len() == len(b.String())。
func (Builder) Reset
Reset 将 Builder 重置为空。
func (Builder) String
- func (b Builder) String()
String 返回已经写入的字符串。
func (Builder) Write
Write 会把 p 的内容追加到 b 的缓存中。Write 总是返回 len(p), nil。
func (Builder) WriteByte
WriteByte 将字节 c 追加到 b 的缓存中。返回的错误总是 nil。
WriteRune 将 UTF-8 编码的 Unicode 代码点 r 追加到 b 的缓存中。它返回 r 的长度和 nil 错误。
func (Builder)
¶
WriteString 将 s 的内容追加到 b 的缓存中。它返回 s 的长度和 nil。
type
¶
- type Reader struct {
// contains filtered or unexported fields
}
Reader 实现对字符串读取的 io.Reader、io.ReaderAt、io.Seeker、io.WriterTo、io.ByteScanner 和 io.RuneScanner 接口。
func
¶
- func NewReader(s ) Reader
NewReader 返回一个读取 s 的 Reader。它与 bytes.NewBufferString 类似不过 Reader 是只读的并且效率更高。
func (Reader)
¶
- func (r ) Len() int
Len 返回字符串未读取部分的字节数。
func (Reader)
¶
func (Reader)
¶
func (Reader) ReadByte
func (Reader)
¶
- func (r ) Reset(s string)
Reset 使 Reader 开始读取 s。
func (Reader)
¶
Seek 方法实现了 io.Seeker 接口。
func (Reader) Size
- func (r Reader) Size()
Size 方法返回底层字符串的长度。它也是 ReadAt 能读取到的有效字节数。该返回值不受其他方法影响。
func (Reader) UnreadByte
- func (r Reader) UnreadByte()
func (Reader) UnreadRune
- func (r Reader) UnreadRune()
func (Reader) WriteTo
WriteTo 方法实现了 io.WriterTo 接口。
- type Replacer struct {
// contains filtered or unexported fields
}
Replacer 根据给定的替换列表来替换字符串。它可以安全的被多个 goroutine 同时使用。
func
¶
- func NewReplacer(oldnew …) Replacer
NewReplacer 会配置 Replacer 的替换列表(每项都包含一个替换目标和替换值)并返回 Replacer。替换操作会按顺序进行并且不会重叠。
例:
r := strings.NewReplacer(“<”, “<”, “>”, “>”)
fmt.Println(r.Replace(“This is HTML!”))
// Output: This is <b>HTML</b>!
func (Replacer) Replace
Repalce 对 s 应用替换并返回替换结果。
WriteString 方法对 s 应用替换后将结果写入 w 中。