golang学习笔记:标准库strings

strings是Go语言标准库中的一个包,提供了字符串操作相关的函数。该包包含了一些常用的字符串处理功能,如拼接、分割、替换、查找等。

常用方法

字符串查询和判断

包含关系判断

s := "hello world"

// 判断包含
strings.Contains(s, "world")        // true
strings.Contains(s, "x")            // false
strings.ContainsAny(s, "aeiou")     // true (包含任意字符)
strings.ContainsRune(s, 'h')        // true

// 判断前缀后缀
strings.HasPrefix(s, "hello")       // true
strings.HasSuffix(s, "world")       // true

位置查询

s := "hello world"

// 查找位置
strings.Index(s, "l")               // 2 (第一个'l')
strings.LastIndex(s, "l")           // 9 (最后一个'l')
strings.IndexAny(s, "aeiou")        // 1 (第一个元音'e')
strings.LastIndexAny(s, "aeiou")    // 7 (最后一个元音'o')

// 查找字符
strings.IndexByte(s, 'w')           // 6
strings.IndexRune(s, '世')          // -1 (没找到)

计数和比较

s := "hello world"

// 计数
strings.Count(s, "l")               // 3
strings.Count(s, "ll")              // 1

// 比较
strings.Compare("a", "b")           // -1 (a < b)
strings.Compare("b", "a")           // 1 (b > a)
strings.Compare("a", "a")           // 0 (相等)

// 不区分大小写比较
strings.EqualFold("Go", "go")       // true

字符串转换

大小写转换

s := "Hello World"

strings.ToUpper(s)                  // "HELLO WORLD"
strings.ToLower(s)                  // "hello world"
strings.Title(s)                    // "Hello World" (每个单词首字母大写)
strings.ToTitle(s)                  // "HELLO WORLD"

// 特殊大小写处理
strings.ToUpperSpecial(unicode.TurkishCase, "i") // "İ"

字符串替换

s := "oink oink oink"

// 替换指定次数
strings.Replace(s, "oink", "moo", 2)    // "moo moo oink"

// 替换所有
strings.ReplaceAll(s, "oink", "moo")    // "moo moo moo"

// 字符替换
strings.Map(func(r rune) rune {
    if r == 'o' {
        return 'O'
    }
    return r
}, s)                                   // "Oink Oink Oink"

重复和修剪

// 重复字符串
strings.Repeat("na", 3)             // "nanana"

// 修剪空格
strings.TrimSpace("  hello  ")      // "hello"

// 修剪指定字符
strings.Trim("!!!Hello!!!", "!")    // "Hello"
strings.TrimLeft("!!!Hello!!!", "!") // "Hello!!!"
strings.TrimRight("!!!Hello!!!", "!") // "!!!Hello"
strings.TrimPrefix("hello_world", "hello_") // "world"
strings.TrimSuffix("hello_world", "_world") // "hello"

// 修剪函数
strings.TrimFunc("!!!Hello!!!", func(r rune) bool {
    return r == '!'
})                                   // "Hello"

字符串分割和连接

分割字符串

s := "a,b,c,d,e"

// 按分隔符分割
strings.Split(s, ",")               // []string{"a","b","c","d","e"}
strings.SplitAfter(s, ",")          // []string{"a,","b,","c,","d,","e"}
strings.SplitN(s, ",", 3)           // []string{"a","b","c,d,e"}

// 按空白分割
strings.Fields("  foo bar  baz   ") // []string{"foo","bar","baz"}
strings.FieldsFunc("a,b|c", func(r rune) bool {
    return r == ',' || r == '|'
})                                   // []string{"a","b","c"}

连接字符串

// 连接切片
strings.Join([]string{"a", "b", "c"}, ",") // "a,b,c"

// 字符串构建器
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteByte(' ')
builder.WriteString("World")
result := builder.String()          // "Hello World"

性能优化技巧

使用 strings.Builder

// 不推荐:使用 + 拼接大量字符串
var result string
for i := 0; i < 1000; i++ {
    result += "data"
}

// 推荐:使用 strings.Builder
var builder strings.Builder
builder.Grow(4000) // 预分配空间
for i := 0; i < 1000; i++ {
    builder.WriteString("data")
}
result := builder.String()

工具函数

package stringutil

import "strings"

// 检查字符串是否为空或仅包含空白
func IsBlank(s string) bool {
    return strings.TrimSpace(s) == ""
}

// 安全截断字符串
func Truncate(s string, maxLen int) string {
    if len(s) <= maxLen {
        return s
    }
    return s[:maxLen] + "..."
}

// 反转字符串
func Reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

// 检查是否以任意前缀开始
func HasAnyPrefix(s string, prefixes ...string) bool {
    for _, prefix := range prefixes {
        if strings.HasPrefix(s, prefix) {
            return true
        }
    }
    return false
}

// 移除所有空白
func RemoveWhitespace(s string) string {
    return strings.Map(func(r rune) rune {
        if r == ' ' || r == '\t' || r == '\n' || r == '\r' {
            return -1
        }
        return r
    }, s)
}

总结

  • 查询判断 - Contains, HasPrefix, Index, Count
  • 转换处理 - ToUpper, ToLower, Replace, Trim
  • 分割连接 - Split, Fields, Join, Builder
  • 比较计数 - Compare, EqualFold, Count
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值