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)

浙公网安备 33010602011771号