字符串操作 #
一、strings包概述 #
strings包提供了丰富的字符串操作函数。
二、查找操作 #
2.1 Contains系列 #
go
import "strings"
s := "Hello, World!"
fmt.Println(strings.Contains(s, "World")) // true
fmt.Println(strings.ContainsAny(s, "aeiou")) // true
fmt.Println(strings.ContainsRune(s, 'W')) // true
2.2 Index系列 #
go
s := "Hello, World!"
fmt.Println(strings.Index(s, "World")) // 7
fmt.Println(strings.IndexAny(s, "aeiou")) // 1
fmt.Println(strings.IndexRune(s, 'W')) // 7
fmt.Println(strings.LastIndex(s, "o")) // 8
2.3 统计出现次数 #
go
s := "Hello, World!"
fmt.Println(strings.Count(s, "l")) // 3
2.4 前后缀判断 #
go
s := "Hello, World!"
fmt.Println(strings.HasPrefix(s, "Hello")) // true
fmt.Println(strings.HasSuffix(s, "!")) // true
三、替换操作 #
3.1 Replace #
go
s := "Hello, World!"
result := strings.Replace(s, "World", "Go", 1)
fmt.Println(result) // Hello, Go!
3.2 ReplaceAll #
go
s := "Hello, Hello, Hello!"
result := strings.ReplaceAll(s, "Hello", "Hi")
fmt.Println(result) // Hi, Hi, Hi!
3.3 Map #
go
s := "Hello, World!"
result := strings.Map(func(r rune) rune {
if r >= 'a' && r <= 'z' {
return r - 32
}
return r
}, s)
fmt.Println(result) // HELLO, WORLD!
四、分割操作 #
4.1 Split #
go
s := "a,b,c,d"
parts := strings.Split(s, ",")
fmt.Println(parts) // [a b c d]
4.2 SplitN #
限制分割次数:
go
s := "a,b,c,d"
parts := strings.SplitN(s, ",", 2)
fmt.Println(parts) // [a b,c,d]
4.3 SplitAfter #
保留分隔符:
go
s := "a,b,c"
parts := strings.SplitAfter(s, ",")
fmt.Println(parts) // [a, b, c]
4.4 Fields #
按空白分割:
go
s := "Hello World\tGo"
fields := strings.Fields(s)
fmt.Println(fields) // [Hello World Go]
4.5 FieldsFunc #
自定义分割函数:
go
s := "a1b2c3d"
fields := strings.FieldsFunc(s, func(r rune) bool {
return r >= '0' && r <= '9'
})
fmt.Println(fields) // [a b c d]
五、连接操作 #
5.1 Join #
go
parts := []string{"Hello", "World"}
s := strings.Join(parts, " ")
fmt.Println(s) // Hello World
5.2 Repeat #
go
s := strings.Repeat("Go", 3)
fmt.Println(s) // GoGoGo
六、大小写转换 #
6.1 ToUpper/ToLower #
go
s := "Hello, World!"
fmt.Println(strings.ToUpper(s)) // HELLO, WORLD!
fmt.Println(strings.ToLower(s)) // hello, world!
6.2 Title #
go
s := "hello world"
fmt.Println(strings.Title(s)) // Hello World
6.3 ToTitle #
go
s := "hello world"
fmt.Println(strings.ToTitle(s)) // HELLO WORLD
七、修剪操作 #
7.1 Trim #
去除两端字符:
go
s := " Hello "
fmt.Println(strings.Trim(s, " ")) // Hello
s2 := "***Hello***"
fmt.Println(strings.Trim(s2, "*")) // Hello
7.2 TrimSpace #
去除空白:
go
s := " Hello "
fmt.Println(strings.TrimSpace(s)) // Hello
7.3 TrimPrefix/TrimSuffix #
go
s := "Hello, World!"
fmt.Println(strings.TrimPrefix(s, "Hello, ")) // World!
fmt.Println(strings.TrimSuffix(s, "!")) // Hello, World
7.4 TrimLeft/TrimRight #
go
s := "***Hello***"
fmt.Println(strings.TrimLeft(s, "*")) // Hello***
fmt.Println(strings.TrimRight(s, "*")) // ***Hello
八、比较操作 #
8.1 Compare #
go
fmt.Println(strings.Compare("a", "b")) // -1
fmt.Println(strings.Compare("b", "a")) // 1
fmt.Println(strings.Compare("a", "a")) // 0
8.2 EqualFold #
忽略大小写比较:
go
fmt.Println(strings.EqualFold("Hello", "HELLO")) // true
九、Builder类型 #
9.1 基本用法 #
go
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("World")
fmt.Println(builder.String()) // Hello World
9.2 Write方法 #
go
var builder strings.Builder
builder.WriteByte('H')
builder.WriteRune('i')
builder.WriteString("!")
fmt.Println(builder.String()) // Hi!
9.3 性能优势 #
go
func concatStrings(parts []string) string {
var builder strings.Builder
for _, p := range parts {
builder.WriteString(p)
}
return builder.String()
}
十、Reader类型 #
10.1 基本用法 #
go
r := strings.NewReader("Hello, World!")
buf := make([]byte, 5)
n, _ := r.Read(buf)
fmt.Println(string(buf[:n])) // Hello
10.2 Seek #
go
r := strings.NewReader("Hello, World!")
r.Seek(7, 0) // 移动到位置7
buf := make([]byte, 5)
n, _ := r.Read(buf)
fmt.Println(string(buf[:n])) // World
十一、Replacer类型 #
11.1 基本用法 #
go
r := strings.NewReplacer("<", "<", ">", ">")
result := r.Replace("<html>")
fmt.Println(result) // <html>
11.2 多次替换 #
go
r := strings.NewReplacer(
"a", "1",
"b", "2",
"c", "3",
)
result := r.Replace("abc")
fmt.Println(result) // 123
十二、实际应用 #
12.1 解析键值对 #
go
func parseKV(s string) map[string]string {
result := make(map[string]string)
pairs := strings.Split(s, ",")
for _, pair := range pairs {
kv := strings.SplitN(pair, "=", 2)
if len(kv) == 2 {
result[strings.TrimSpace(kv[0])] = strings.TrimSpace(kv[1])
}
}
return result
}
12.2 驼峰转换 #
go
func toSnakeCase(s string) string {
var result []rune
for i, r := range s {
if i > 0 && r >= 'A' && r <= 'Z' {
result = append(result, '_')
}
result = append(result, r)
}
return strings.ToLower(string(result))
}
fmt.Println(toSnakeCase("HelloWorld")) // hello_world
十三、总结 #
strings包常用函数:
| 分类 | 函数 |
|---|---|
| 查找 | Contains, Index, Count, HasPrefix, HasSuffix |
| 替换 | Replace, ReplaceAll, Map |
| 分割 | Split, SplitN, Fields |
| 连接 | Join, Repeat |
| 大小写 | ToUpper, ToLower, Title |
| 修剪 | Trim, TrimSpace, TrimPrefix, TrimSuffix |
关键点:
- strings包:提供丰富的字符串操作函数
- Builder:高效构建字符串
- Reader:字符串读取器
- Replacer:批量替换
准备好学习字符串转换了吗?让我们进入下一章!
最后更新:2026-03-26