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
834

被折叠的 条评论
为什么被折叠?



