golang strings包的总结

本文详细介绍了Go语言中strings包的各种实用功能,包括字符串搜索、分割、连接、替换及修剪等操作。同时还提供了如何使用自定义函数处理Unicode字符的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

strings 包的学习

strings.Index(s, substr string) index

返回 substr 在 s 中的位置,是以 ascii 码为单位的,如果有汉字,一个汉字当三个字节

如果想把汉字也当成一个长度,可以用以下自己封装的函数

func Utf8Index(str1, str2 string) int {
    i := strings.Index(str1, str2)
    if i < 0 {
        return i
    }
    
    buf := string(str1[:i])
    
    //str := string(buf)
    
    fmt.Println(buf)
    runeBuf := []rune(buf)
    
    return len(runeBuf)
}

是否存在某个字符或子串

strings.Contains(s, substr string) bool

子串 substr 是否存在与 s 中, 存在返回true 否则返回 false

strings.ContainsAny(s chars string) bool

chars 中任何一个 unicode 字符存在于 s , 如果存在返回true

strings.ContainsRune(s string, r rune) bool

unicode 字符 r 在 s 中,返回 true

子串出现次数

strings.Count(s, sep string) int

此方法采用 rabin-karp 算法

注意: 如果 sep 为空,返回的是 utf8.RuneCountInString(s)+1,
另外,此方法是计算子串在字符串中出现的无重叠的次数

字符串分割为 []string

strings.Fields(s string) []strings

Fields 用一个或多个连续的空格分隔字符串s, 返回子字符串的数组, 空格的定义是 '\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP)

strings.FieldsFunc(s string, f func(rune) bool) []strings

s 中的每一个字符用 f 方法处理, 如果返回 true, 则切割字符串

strings.Split(s, sep string) []string

strings.SplitN(s, sep string, n int) []string

这两个方法用 sep 来分割字符串s。SplitN 的第三个参数是返回切片的长度, Split(s, sep) 等价于 SplitN(s, sep, -1)

SplitN 的第三个参数如果小于0,则用 sep 完全分割 s, 如果 n>0, 则分割 n个长度的切片。

strings.SplitAfter(s, sep string) []string

strings.SplitAfterN(s, sep string, n int) []string

这两个方法会保留 sep 字符串

字符串是否有某些前缀或后缀

strings.HasPrefix(s, prefix string) bool

s 是否以 prefix 开始

strings.HasSuffix(s, suffix string) bool

s 中是否以 suffix 结尾

字符或子串在字符串中出现的位置

strings.Index(s, sep string) int

sep 在 s中第一次出现的位置

strings.IndexByte(s string, b byte) int

b 第一次出现在 s 中的位置

strings.IndexAny(s, chars string) int

chars 中任何一个 unicode 字符在 s 中出现的位置

strings.IndexFunc(s string, f func(rune) bool) int

sep 第一次在 s 中出现的位置, sep 满足 f(sep) 返回 true

strings.IndexRune(s string, r rune) int

跟 IndexByte 类似

strings.LastIndex(s, sep string) int

sep 最后一次在 s 中出现的位置

strings.LastIndexByte(s string, c byte) int

strings.LastIndexAny(s, chars string) int

strings.LastIndexFunc(s string, f func(rune) bool) int

字符串连接操作

strings.Join(sliceStr []string, sep string) string

sliceStr 切片用 sep 连接成一个字符串

字符串重复操作

strings.Repeat(s string, count int) string

将 s 重复 count 次

字符串过滤

strings.Map(mapping func(rune) rune, s string) string
s 中的字符经过 mapping 方法过滤,如果舍弃return -1

字符串替换

strings.Replace(s, old, new string, n int) string

strings.ReplaceAll(s, old , new string) string

字符串左右边修剪

strings.Trim(s , cutset string) string

strings.TrimLeft(s , cutset string) string

func TrimRight(s string, cutset string) string

func TrimPrefix(s, prefix string) string

strings.TrimSuffix(s, suffix string) string

strings.TrimSpace(s string) string

strings.TrimFunc(s string, f func(rune) bool) string

strings.TrimLeftFunc(s string, f func(rune) bool) string

strings.TrimRightFunc(s string, f func(rune) bool) string

strings 包中的结构体

strings.Replacer

通过 NewReplacer 来创建 Replacer, 传的参数是成对出现的

re := strings.NewReplacer("\n", "\\n", "\t", "\\t")
str7 := "hello \n world \t !"
fmt.Println(str7)
str6 := re.Replace(str7)
fmt.Println(str6)
// 结果:
hello 
 world 	 !
hello \n world \t !

Builder 类型

这个 结构体 的作用主要做连接字符串用的,避免用 + 号连接字符串, 减少字符串的创建 内存的分配

// 该方法向 b 写入一个字节
func (b *Builder) WriteByte(c byte) error
// WriteRune 方法向 b 写入一个字符
func (b *Builder) WriteRune(r rune) (int, error)
// WriteRune 方法向 b 写入字节数组 p
func (b *Builder) Write(p []byte) (int, error)
// WriteRune 方法向 b 写入字符串 s
func (b *Builder) WriteString(s string) (int, error)
// Len 方法返回 b 的数据长度。
func (b *Builder) Len() int
// Cap 方法返回 b 的 cap。
func (b *Builder) Cap() int
// Grow 方法将 b 的 cap 至少增加 n (可能会更多)。如果 n 为负数,会导致 panic。
func (b *Builder) Grow(n int)
// Reset 方法将 b 清空 b 的所有内容。
func (b *Builder) Reset()
// String 方法将 b 的数据以 string 类型返回。
func (b *Builder) String() string
### 回答1: 在 Go 中,你可以使用 `==` 运算符来判断两个字符串是否完全匹配。例如: ``` s1 := "Hello, World" s2 := "Hello, World" if s1 == s2 { fmt.Println("The strings are equal.") } else { fmt.Println("The strings are not equal.") } ``` 上面的代码会输出 "The strings are equal.",因为两个字符串完全匹配。 注意,这种方法只能用于比较两个字符串的完全匹配,如果你想要进行模糊匹配(例如,忽略大小写,或者只匹配字符串的一部分),你可以使用 Go 的内置函数 `strings.EqualFold()` 或 `strings.Contains()`。 例如: ``` s1 := "Hello, World" s2 := "hello, world" if strings.EqualFold(s1, s2) { fmt.Println("The strings are equal (ignoring case).") } else { fmt.Println("The strings are not equal.") } if strings.Contains(s1, "World") { fmt.Println("s1 contains the string 'World'.") } ``` 上面的代码会输出 "The strings are equal (ignoring case)." 和 "s1 contains the string 'World'."。 ### 回答2: golangstrings提供了多种方法来处理字符串,其中括字符串的完全匹配。 要判断一个字符串是否与另一个字符串完全匹配,可以使用strings中的Equal方法。这个方法接收两个字符串作为参数,并返回一个布尔值,表示这两个字符串是否完全相同。 下面是一个使用Equal方法判断字符串是否完全匹配的示例代码: ```go package main import ( "fmt" "strings" ) func main() { str1 := "Hello" str2 := "Hello" if strings.EqualFold(str1, str2) { fmt.Println("字符串完全匹配") } else { fmt.Println("字符串不完全匹配") } } ``` 在这个示例中,我们定义了两个字符串变量str1和str2,并将它们分别赋值为"Hello"。然后,我们使用Equal方法判断这两个字符串是否完全匹配。如果它们完全相同,我们就打印"字符串完全匹配",否则打印"字符串不完全匹配"。 在实际应用中,字符串的完全匹配可以用于判断用户输入是否与特定字符串相等,或者判断两个字符串是否相同等场景。使用strings中的Equal方法,我们可以方便地实现这一功能。 ### 回答3: 在Golang中,可以使用strings中的函数来进行字符串的完全匹配。具体而言,可以使用strings中的EqualFold函数来判断两个字符串是否在不区分大小写的情况下完全匹配。 EqualFold函数的用法是:strings.EqualFold(str1, str2),其中str1和str2分别是要比较的两个字符串。如果两个字符串在不区分大小写的情况下完全匹配,该函数将返回true,否则将返回false。 除了EqualFold函数之外,还可以使用等号直接比较两个字符串,比如str1 == str2。这种方式只有当两个字符串完全相同(括大小写)时才返回true,否则返回false。 需要注意的是,strings中提供的函数只能进行简单的字符串比较,不能进行更为复杂的匹配操作。如果需要进行更复杂的匹配,可能需要使用正则表达式或其他相关的工具。 总之,在Golang中,可以使用strings.EqualFold函数或直接使用等号来判断两个字符串是否完全匹配。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值