字符串操作 #

一、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("<", "&lt;", ">", "&gt;")
result := r.Replace("<html>")
fmt.Println(result)  // &lt;html&gt;

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

关键点:

  1. strings包:提供丰富的字符串操作函数
  2. Builder:高效构建字符串
  3. Reader:字符串读取器
  4. Replacer:批量替换

准备好学习字符串转换了吗?让我们进入下一章!

最后更新:2026-03-26