程序中很大一部分与字符串的操作相关,于是整理一下Go语言中关于字符串操作的标准包strings
参考:
Go语言—strings包(字符串操作)
go strings中文文档
go strings原文档
更新时间:2023年8月29日
版本号:1.21
函数
字符串比较
1
| func Compare(a, b string) int
|
按字典顺序比较,如果 a==b,则结果为 0,如果 a < b,则结果为 -1,如果 a > b,则结果为 +1。
比较仅用于包字节的对称性。使用内置的字符串比较运算符 ==、<、> 等通常更清晰、更快
1
| func EqualFold(s, t string) bool
|
函数EqualFold
比较解释为UTF-8字符串的s
和t
在Unicode大小写折叠下是否相等
即:不区分大小写比较
字符串查询
查询包含字符(串)
1
2
3
4
| func Contains(s, substr string) bool
func ContainsAny(s, chars string) bool
func ContainsRune(s string, r rune) bool
func ContainsFunc(s string, f func(rune) bool) bool
|
函数Contains
返回s
中是否有子串substr
函数ContainsAny
返回s
中是否含有子串chars
中的任意Unicode字符
函数ContainsRune
返回s
中是否含有Unicode字符r
函数ContainsFunc
返回s
中是否含有满足函数f
的Unicode字符
1
2
| func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool
|
函数HasPrefix
返回s
中是否含有前缀prefix
函数HasSuffix
返回s
中是否含有后缀suffix
子串统计
1
| func Count(s, substr string) int
|
函数Count
计算s
中子串substr
的非重叠的数量。如果substr
是空字符串,Count
返回( 1 + s
中的Unicode字符数)
字符串索引
1
2
3
4
5
6
7
8
9
10
11
12
13
| func Index(s, substr string) int
func LastIndex(s, substr string) int
func IndexAny(s, chars string) int
func LastIndexAny(s, chars string) int
func IndexByte(s string, c byte) int
func LastIndexByte(s string, c byte) int
func IndexFunc(s string, f func(rune) bool) int
func LastIndexFunc(s string, f func(rune) bool) int
func IndexRune(s string, r rune) int
|
函数Index
返回字符串s
中子串substr
第一个实例的索引,如不存在则返回-1
函数LastIndex
返回字符串s
中子串substr
最后一个实例的索引,如不存在则返回-1
函数IndexAny
返回字符串s
中Unicode字符集chars
第一个实例的索引,如不存在则返回-1
函数LastIndexAny
返回字符串s
中Unicode字符集chars
最后一个实例的索引,如不存在则返回-1
函数IndexByte
返回字符串s
中字节c
第一个实例的索引,如不存在则返回-1
函数LastIndexByte
返回字符串s
中字节c
最后一个实例的索引,如不存在则返回-1
函数IndexFunc
返回字符串s
中满足函数f
第一个实例的索引,如不存在则返回-1
函数LastIndexFunc
返回字符串s
中满足函数f
最后一个实例的索引,如不存在则返回-1
函数IndexRune
返回字符串s
中满足Unicode字符r
第一个实例的索引,如不存在则返回-1;如果 r 是 utf8.RuneError,它将返回任何无效 UTF-8 字节序列的第一个实例
注:在使用Index
函数时,中文字符串返回的是byte
形式,转换成rune
参考:go 返回中文字符串字串索引
字符串改动
字符串分割
1
2
| func Fields(s string) []string
func FieldsFunc(s string, f func(rune) bool) []string
|
函数Fields
按空格切分字符串s
,如果 s 仅包含空白,则返回s
的子字符串切片或空切片
函数FieldsFunc
按不满足函数f
的Unicode字符进行切分。如果 s 中的所有代码点都满足 f(c) 或字符串s
为空,则返回一个空切片。
1
2
3
4
5
| func Split(s, sep string) []string
func SplitN(s, sep string, n int) []string
func SplitAfter(s, sep string) []string
func SplitAfterN(s, sep string, n int) []string
|
Split
函数以sep
分割;如果s中无sep
且sep
非空,返回切片只包含s
;如果sep
为空则每个UTF-8序列之后拆分;如果s
与sep
都为空,则返回空
SplitN
函数中n为子串数量,n为负则等同SplitAfter
;n为0则返回nil
SplitAfter
函数在sep之后分割
SplitAfterN
函数中n为子串数量,n为负则等同SplitAfter
;n为0则返回nil
1
2
3
| func Cut(s, sep string) (before, after string, found bool)
func CutPrefix(s, prefix string) (after string, found bool)
func CutSuffix(s, suffix string) (before string, found bool)
|
Cut
函数返回sep
字符串之前和之后的字符串,如果s
中有found
字符串,则返回true
,否则返回false
CutPrefix
函数返回字符串s
去掉前缀prefix
的字符串,如果s
中有前缀prefix
,则返回true
,否则返回false
CutSuffix
函数返回字符串s
去掉后缀suffix
的字符串,如果s
中有后缀suffix
,则返回true
,否则返回false
字符串拼接
1
| func Join(elems []string, sep string) string
|
分隔符字符串sep
放置在结果字符串中的元素之间
字符串重复Repeat
1
| func Repeat(s string, count int) string
|
count
为重复次数,如果count
为负数或结果(len(s) * count)溢出则panic
字符串替换/更改
1
2
| func Replace(s, old, new string, n int) string
func ReplaceAll(s, old, new string) string
|
Replace
函数返回字符串s
的副本,其中old
的前n个非重叠实例被new
替换。如果old
为空,则它在字符串的开头和每个 UTF-8 序列之后匹配,k个rune字符串生成最多k+1次替换。如果n为负,则替换次数没有限制。
ReplaceAll
函数为全部替换
1
| func Map(mapping func(rune) rune, s string) string
|
函数mapping
对字符串中每个字符进行修改,如果mapping
返回负值,则删除该字符
1
| func ToValidUTF8(s, replacement string) string
|
ToValidUTF8
函数将无效UTF8字符替换为replacement
字符串大小写转换
1
2
3
4
5
6
7
8
| func Title(s string) string
func ToTitle(s string) string
func ToLower(s string) string
func ToLowerSpecial(c unicode.SpecialCase, s string) string
func ToUpper(s string) string
func ToUpperSpecial(c unicode.SpecialCase, s string) string
|
Title
函数将每个单词的首字母转为Title格式
ToTitle
函数将所有单词的首字母转为Title格式
字符串去头/尾
1
2
3
4
5
6
7
8
9
10
11
12
13
| 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 TrimRight(s, cutset string) string
func TrimRightFunc(s string, f func(rune) bool) string
func TrimPrefix(s, prefix string) string
func TrimSuffix(s, suffix string) string
func TrimSpace(s string) string
|
Trim
函数去掉字符串s
中包含cutset
中字符的头部与尾部
TrimFunc
函数去掉字符串s
中满足函数f
的头部与尾部
TrimLeft
函数去掉字符串s
中包含cutset
中字符的头部
TrimPrefix
函数去掉字符串s
中为prefix
的头部
TrimSuffix
函数去掉字符串s
中为prefix
的尾部
TrimSpace
函数去掉字符串s
中包含\n
\t
\r
中字符的头部与尾部
strings.Builder
官方文档中的介绍:
Builder 用于使用 Write 方法有效地构建字符串。它最大限度地减少了内存复制
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 3; i >= 1; i-- {
fmt.Fprintf(&b, "%d...", i)
}
b.WriteString("ignition")
fmt.Println(b.String())
}
|
输出:
相关函数
1
2
3
4
5
6
7
8
9
| func (b *Builder) Cap() int //返回底层切片容量(字符串分配的总空间)
func (b *Builder) Grow(n int) //增加n字节容量
func (b *Builder) Len() int //返回长度
func (b *Builder) Reset() //重置Builder
func (b *Builder) String() string //返回string
func (b *Builder) Write(p []byte) (int, error) //写入p,返回len(p),nil
func (b *Builder) WriteByte(c byte) error //写入c,返回nil
func (b *Builder) WriteRune(r rune) (int, error)//写入r,返回r的长度和nil
func (b *Builder) WriteString(s string) (int, error)//写入字符串s,返回len(s)和nil
|
strings.Reader / strings.Replacer
咕咕咕