go 字符串核心方法

  • 字符串拼接优先使用 strings.Builder 或 bytes.Buffer,避免频繁使用 + 导致内存分配
  • 对于大量字符串处理,考虑使用 []rune 处理 Unicode 字符
  • 使用 strings 包的函数通常比自己实现更高效

1、拼接

  • 使用 + 运算符(简单场景)
  • 使用 strings.Builder(高效拼接,推荐)
  • 使用 fmt.Sprintf(格式化拼接)
// 简单拼接
s1 := "hello"
s2 := "world"
s3 := s1 + " " + s2

// 高效拼接
var builder strings.Builder
builder.WriteString(s1)
builder.WriteString(" ")
builder.WriteString(s2)
result := builder.String()

2、切割与拆分

  • Fields(s string)会将连续的空白字符(空格、制表符 \t、换行符 \n 等)视为一个分隔符,自动忽略字符串首尾的空白字符,返回一个字符串切片,包含所有非空白的子字符串(专门为处理各种空白场景设计的)
  • Split(s, " ")只会按单个空格分割,无法处理多个连续空格或其他空白字符
  • strings.FieldsFunc 如果需要自定义分割逻辑(不仅仅是空白字符),可以使用 FieldsFunc:
// 按照空格切分
s := "  hello   world  你好  \t世界\n"
result := strings.Fields(s) // 会将连续
fmt.Printf("%q\n", result) // 输出 ["hello" "world" "你好" "世界"]

// 按特定字符切分
s := "a,b,c,d"
parts := strings.Split(s, ",")      // 按分隔符拆分
parts := strings.SplitN(s, ",", 2)  // 最多拆分n个部分
parts := strings.SplitAfter(s, ",") // 保留分隔符

// 去除空字符串
s = "a,,b,c,,d"
parts = strings.FieldsFunc(s, func(r rune) bool {
    return r == ','
})

3、查找与替换

s := "hello world"

// 查找
strings.Contains(s, "world")   // 是否包含子串
strings.Index(s, "l")          // 首次出现位置
strings.LastIndex(s, "l")      // 最后出现位置

// 替换
strings.Replace(s, "l", "x", 2)   // 替换前n次
strings.ReplaceAll(s, "l", "x")   // 替换所有

4、大小写转换

s := "Hello World"
strings.ToLower(s) // 转为小写
strings.ToUpper(s) // 转为大写

5、修剪

s := "  hello world  \t\n"
strings.TrimSpace(s)        // 去除首尾空白
strings.Trim(s, " he")      // 去除首尾指定字符
strings.TrimLeft(s, " h")   // 去除左侧指定字符
strings.TrimRight(s, " d\n")// 去除右侧指定字符

6、字符串与数字转换

使用 strconv

// 字符串 → 整数
num, err := strconv.Atoi("123")

// 整数 → 字符串
str := strconv.Itoa(123)

// 字符串 → 浮点数
f, err := strconv.ParseFloat("3.14", 64)

// 浮点数 → 字符串
str := strconv.FormatFloat(3.14, 'f', 2, 64)
posted @ 2025-09-04 16:23  *Sakura/*  阅读(10)  评论(0)    收藏  举报