Skip to content

字符串

  • 字符串(string)是一个不可变的字节序列,通常用于表示文本数据。

定义

go
// 定义一个字符串变量
var str string

操作

  • strings 官方包提供了字符串的操作函数,如查找、替换、截取等。

字符串的长度

go
// 定义一个字符串变量
str := "hello 世界"
// 打印字符串的长度 1个汉字占3个字节
fmt.Println(len(str)) // 11 (5个英文+1空格+2汉字*3)
// 计算字符串的字符数
fmt.Println(utf8.RuneCountInString(str)) // 8 (5个英文+1空格+2汉字)

字符串的索引

  • Go 字符串本质是字节(byte)的只读切片,每个索引访问的是单个字节。
  • 因此字符串的索引操作返回的是字节值,即单个字符串的ASCII码。
go
// 定义一个字符串变量
str := "hello"
// 打印 单个字符串
fmt.Println(str, str[0]) // hello 104
// 打印 多个字符串
fmt.Println(str, str[0:2], str[2:4]) // hello he ll

字符串拼接

go
// 定义一个字符串变量
str := "hello"
// 字符串拼接
fmt.Println(str + " world") // hello world

// 高效拼接(大量字符串时)
var builder strings.Builder
builder.WriteString("hello")
builder.WriteString(" ")
builder.WriteString("世界")
fmt.Println(builder.String())

字符串查找

go
// 定义一个字符串变量
str := "hello 世界"
// 是否包含子字符串
fmt.Println(strings.Contains(str, "hello")) // true
// 查找子字符串的索引
fmt.Println(strings.Index(str, "世界")) // 6

转切片

go
// 定义一个字符串变量
str := "hello 世界"
// 转字节切片
fmt.Println([]byte(str)) // [104 101 108 108 111 32 228 184 150 231 149 140]
// 转字符串切片
fmt.Println(strings.Split(str, " ")) // [hello 世界]