四时宝库

程序员的知识宝库

Go语言-字符串操作函数(二)(go语言string()函数)

4.fmt包(格式化字符串)

fmt 包主要用于格式化字符串,类似于 C 语言的 printf。

4.1 字符串格式化

  • fmt.Sprintf(format string, a ...interface{}) string
    格式化字符串并返回,不打印到标准输出
s := fmt.Sprintf("My age is %d", 25)
fmt.Println(s) // "My age is 25"
  • fmt.Fprintf(writer io.Writer, format string, a ...interface{}) (int, error)
    将格式化字符串写入 io.Writer(如文件、网络等)
fmt.Fprintf(os.Stdout, "Hello %s\n", "World") // 输出: Hello World

4.2 格式化占位符

占位符

说明

%s

字符串

%d

整数(十进制)

%f

浮点数

%t

布尔值

%v

任意值

%T

显示变量的类型

%q

带双引号的字符串


5.unicode包(字符处理)

unicode 包用于处理 Unicode 字符,例如判断字符类型(字母、数字、标点符号等)。

5.1 判断字符类型

  • unicode.IsDigit(r rune) bool
    判断字符是否是数字
fmt.Println(unicode.IsDigit('9')) // true
  • unicode.IsLetter(r rune) bool
    判断字符是否是字母
fmt.Println(unicode.IsLetter('A')) // true
fmt.Println(unicode.IsLetter('9')) // false
  • unicode.IsSpace(r rune) bool
    判断字符是否是空白字符(如 \t、\n、 等)
fmt.Println(unicode.IsSpace(' ')) // true
  • unicode.ToUpper(r rune) rune
    将字符转换为大写
fmt.Println(string(unicode.ToUpper('a'))) // "A"

6.regexp包(正则表达式)

regexp 包提供了正则表达式支持,适用于复杂的字符串匹配、查找和替换操作。

6.1 编译正则表达式

  • regexp.Compile(pattern string) (*regexp.Regexp, error)
    编译正则表达式
re, err := regexp.Compile(`\d+`)
fmt.Println(re.MatchString("123abc")) // true
  • regexp.MustCompile(pattern string) *regexp.Regexp
    与 Compile 相同,但如果编译失败则直接 panic
re := regexp.MustCompile(`\d+`)
fmt.Println(re.MatchString("hello")) // false

6.2 查找和替换

  • re.FindString(s string) string
    查找第一个匹配的字符串
fmt.Println(re.FindString("abc123xyz")) // "123"
  • re.ReplaceAllString(s, repl string) string
    使用 repl 替换所有匹配的字符串
fmt.Println(re.ReplaceAllString("abc123xyz", "###")) // "abc###xyz"
  • re.FindAllString(s string, n int) []string
    查找所有匹配的字符串,n=-1 表示查找所有
fmt.Println(re.FindAllString("abc123xyz456", -1)) // ["123" "456"]

7.bytes包(高效字符串处理)

在 Go 语言中,字符串是不可变的,而 []byte 可以修改,因此 bytes 包提供了一些类似 strings 包的高效操作方法。

7.1strings对应的bytes版本

strings 方法

bytes 方法

说明

strings.Contains

bytes.Contains

是否包含

strings.Split

bytes.Split

按分隔符拆分

strings.Trim

bytes.Trim

去除指定字符

strings.ToUpper

bytes.ToUpper

转大写

strings.ToLower

bytes.ToLower

转小写

示例:

fmt.Println(bytes.ToUpper([]byte("hello"))) // "HELLO"

8.strings.Builder(高效字符串拼接)

在 Go 语言中,字符串是不可变的,因此频繁拼接字符串时,建议使用 strings.Builder,它比 + 或 fmt.Sprintf 更高效。

8.1 使用strings.Builder

var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("World")
fmt.Println(builder.String()) // "Hello World"

优点

  1. 性能更高:避免创建多个临时字符串,减少内存分配。
  2. API 友好:提供 WriteString、WriteByte 等方法,易于操作。

9.runes(处理 Unicode 字符串)

Go 语言的 string 是 不可变的 UTF-8 字节序列,所以直接操作字符串的索引可能会导致乱码。为了正确处理 Unicode 字符,可以使用 rune 类型。

9.1 遍历 Unicode 字符串

s := "你好,Go!"
for i, r := range s {
fmt.Printf("Index: %d, Rune: %c\n", i, r)
}

总结

类型

相关包

关键函数

字符串操作

strings

Contains、Split、Replace、Trim

数值转换

strconv

Itoa、Atoi、FormatFloat

格式化

fmt

Sprintf、Fprintf

正则匹配

regexp

Compile、FindString、ReplaceAllString

Unicode

unicode

IsDigit、ToUpper

高效处理

bytes

ToUpper、Split、Trim

字符串拼接

strings.Builder

WriteString


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接