Go package——strings篇

golang关于字符串操作的标准包

程序中很大一部分与字符串的操作相关,于是整理一下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字符串的st在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中无sepsep非空,返回切片只包含s;如果sep为空则每个UTF-8序列之后拆分;如果ssep都为空,则返回空
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
3...2...1...ignition

相关函数

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

咕咕咕

Licensed under CC BY-NC-SA 4.0