如何使用Go中常用的strings函数

发布时间:2021-10-20 16:01:42 作者:iii
来源:亿速云 阅读:137
# 如何使用Go中常用的strings函数

Go语言标准库中的`strings`包提供了大量高效的字符串处理函数,是日常开发中不可或缺的工具。本文将详细介绍最常用的15个`strings`函数,并通过代码示例演示它们的实际应用场景。

## 1. 字符串基础操作

### 1.1 Contains - 检查子串

```go
func Contains(s, substr string) bool

检查字符串s是否包含子串substr:

fmt.Println(strings.Contains("hello world", "hello")) // true
fmt.Println(strings.Contains("hello", "x"))          // false

1.2 Count - 统计出现次数

func Count(s, substr string) int

统计子串substrs中出现的次数(非重叠):

fmt.Println(strings.Count("cheese", "e")) // 3
fmt.Println(strings.Count("five", ""))    // 5 (注意空串的特殊情况)

1.3 HasPrefix/HasSuffix - 前缀/后缀检查

func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool

检查字符串是否以指定内容开头或结尾:

fmt.Println(strings.HasPrefix("Gopher", "Go")) // true
fmt.Println(strings.HasSuffix("Amigo", "go"))   // true

2. 字符串修改操作

2.1 ToUpper/ToLower - 大小写转换

func ToUpper(s string) string
func ToLower(s string) string

全字母大小写转换:

fmt.Println(strings.ToUpper("Gopher"))  // "GOPHER"
fmt.Println(strings.ToLower("GOPHER"))  // "gopher"

2.2 TrimSpace - 去除空白

func TrimSpace(s string) string

去除字符串首尾的空白字符(包括空格、制表符、换行符等):

fmt.Println(strings.TrimSpace(" \t\n Hello \n\t\r\n")) // "Hello"

2.3 Replace - 字符串替换

func Replace(s, old, new string, n int) string

替换字符串中的内容,n指定替换次数(-1表示全部替换):

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
// 输出: "oinky oinky oink"

3. 字符串分割与组合

3.1 Split - 字符串分割

func Split(s, sep string) []string

按照分隔符sep分割字符串:

fmt.Printf("%q\n", strings.Split("a,b,c", ",")) // ["a" "b" "c"]
fmt.Printf("%q\n", strings.Split(" xyz ", ""))  // [" " "x" "y" "z" " "]

3.2 Join - 字符串连接

func Join(elems []string, sep string) string

将字符串切片用分隔符连接:

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", ")) // "foo, bar, baz"

3.3 Fields - 按空白分割

func Fields(s string) []string

按空白字符分割字符串(连续的空白视为单个分隔符):

fmt.Printf("Fields are: %q", strings.Fields("  foo bar  baz   "))
// 输出: ["foo" "bar" "baz"]

4. 字符串搜索与定位

4.1 Index - 查找子串位置

func Index(s, substr string) int

返回子串首次出现的索引,不存在则返回-1:

fmt.Println(strings.Index("chicken", "ken")) // 4
fmt.Println(strings.Index("chicken", "dmr")) // -1

4.2 LastIndex - 反向查找

func LastIndex(s, substr string) int

返回子串最后一次出现的索引:

fmt.Println(strings.LastIndex("go gopher", "go")) // 3

4.3 IndexAny/LastIndexAny - 字符集查找

func IndexAny(s, chars string) int

查找字符集中任意字符首次出现的位置:

fmt.Println(strings.IndexAny("chicken", "aeiouy")) // 2
fmt.Println(strings.IndexAny("crwth", "aeiouy"))   // -1

5. 字符串转换与构建

5.1 Repeat - 重复字符串

func Repeat(s string, count int) string

将字符串重复指定次数:

fmt.Println("ba" + strings.Repeat("na", 2)) // "banana"

5.2 Builder - 高效字符串构建

strings.Builder类型提供了高效的字符串构建方式:

var b strings.Builder
for i := 3; i >= 1; i-- {
    fmt.Fprintf(&b, "%d...", i)
}
b.WriteString("ignition")
fmt.Println(b.String()) // "3...2...1...ignition"

6. 高级字符串处理

6.1 Map - 字符映射转换

func Map(mapping func(rune) rune, s string) string

对字符串中的每个字符执行映射函数:

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..."))

6.2 Compare - 字符串比较

func Compare(a, b string) int

按字典序比较字符串(通常直接使用==更高效):

fmt.Println(strings.Compare("a", "b")) // -1
fmt.Println(strings.Compare("a", "a")) // 0
fmt.Println(strings.Compare("b", "a")) // 1

7. 性能优化建议

  1. 对于大量字符串拼接操作,优先使用strings.Builder而非+
  2. 多次使用的分割结果可缓存,避免重复计算
  3. 只读场景下使用[]byte转换可能更高效
  4. 考虑使用strings.SplitNstrings.SplitAfter等变体函数

结语

Go的strings包提供了丰富而高效的字符串处理功能,覆盖了大多数日常开发需求。通过合理组合这些函数,可以优雅地解决复杂的字符串处理问题。建议读者在实际项目中多加练习,熟练掌握这些工具的使用方法。

注意:本文基于Go 1.20版本编写,部分函数在不同版本中可能有细微差异 “`

推荐阅读:
  1. Go中常用包笔记 字符串strings(四)
  2. go中strings包的完整使用教程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

golang strings

上一篇:何为分布式事务

下一篇:spring cloud中Hystrix指标收集原理是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》