5/30/2025

Go语言字符串处理学习笔记

1. 字符串定义:双引号 vs 反引号

// 双引号字符串(支持转义字符)
str1 := "Hello\tWorld!\n"  // 包含制表符和换行符
fmt.Println(str1)          // 输出:Hello   World! (换行)

// 反引号字符串(原始字符串,不支持转义)
str2 := `Hello\tWorld!\n` 
fmt.Println(str2)          // 输出:Hello\tWorld!\n

​关键区别​​:

  • 双引号字符串:支持转义序列(\t, \n, \"等)
  • 反引号字符串:保留所有原始字符(包括换行和特殊符号),常用于正则表达式、多行文本

2. 字符串修剪函数对比

import "strings"

func main() {
    // 示例字符串
    s := "!!Hello! Go!!!"
    
    // 去除前后指定子串(仅1次)
    fmt.Println(strings.TrimPrefix(s, "!!"))   // "Hello! Go!!!"
    fmt.Println(strings.TrimSuffix(s, "!!"))   // "!!Hello! Go!"
    
    // 去除前后所有指定字符
    fmt.Println(strings.Trim(s, "!"))         // "Hello! Go"
    fmt.Println(strings.TrimLeft(s, "!"))     // "Hello! Go!!!"
    fmt.Println(strings.TrimRight(s, "!"))    // "!!Hello! Go"
}

​核心区别​​:

函数作用范围去除内容示例输入示例输出
TrimPrefix前缀​1个​​指定子串"!!Hello!""Hello!"
TrimSuffix后缀​1个​​指定子串"Hello!!!""Hello"
Trim两端​所有​​指定字符"!!Hello!!""Hello"
TrimLeft/TrimRight单端​所有​​指定字符"~~Hi~~""Hi~~"/"~~Hi"

3. 使用TrimFunc去除中文字符

import (
    "strings"
    "unicode"
)

func main() {
    str := "Hello! 你好,世界!123"
    
    // 方法1:使用自定义函数(去除所有>238的字符)
    result1 := strings.TrimFunc(str, func(r rune) bool {
        return r > 238 // 简单过滤部分中文字符
    })
    fmt.Println(result1) // "Hello! 123"(部分中文可能残留)

    // 方法2:精确去除所有中文(推荐)
    result2 := strings.Map(func(r rune) rune {
        if unicode.Is(unicode.Han, r) {
            return -1 // 删除字符
        }
        return r
    }, str)
    fmt.Println(result2) // "Hello! ,!123"
}

​关键说明​​:

  1. TrimFunc原理:

    • 遍历字符串的每个rune
    • 当回调函数返回true时删除字符
    • r > 238:简单过滤Unicode值大于238的字符(涵盖大部分中文)
  2. 更准确的方案:

    • 使用unicode.Is(unicode.Han, r)判断汉字
    • 结合strings.Map实现全字符串处理(而非仅首尾)
    • 处理标点符号:中英文标点Unicode不同,需额外处理

​注意​​:直接使用r > 238可能误删非中文字符(如希腊字母),建议使用unicode.Han范围精确匹配。


总结对比表

场景推荐方法注意事项
转义字符串双引号 " "支持\n\t等转义
原始字符串反引号 ` `保留所有原始格式
精确去除前后缀TrimPrefix/TrimSuffix仅去除​​1次​​匹配
批量去除首尾字符Trim系列删除​​所有​​指定字符
按条件删除字符TrimFunc/strings.Map优先使用unicode标准库判断

《金钢经》的故事

A.故事  历史上,因听闻《金钢经》中的一句经文而顿悟成佛的​ ​最著名人物​ ​是​ ​禅宗六祖慧能(惠能)大师​ ​。他的开悟经历深刻体现了“直指人心,见性成佛”的禅宗精髓,以下结合史料详细说明: ​ ​一、慧能大师:因“应无所住而生其心”而顿悟​ ​ ​ ​开悟背...