Skip to content

字符串处理

string类型

在 Go 语言的字符串其实就是一个字符切片。Go 语言的字符串是兼容 Unicode 字符组的,并且是 UTF-8 编码的。

语法格式:

go
// 直接声明字符串数据类型
var str1 string = "Hello, World"

// 使用反引号声明字符串数据类型
var str2 string = `Hello, World`

// 使用类型推断的方式声明字符串数据类型
var str3 = "Hello, World"

// 简短定义的方式声明字符串数据类型
str4 := "Hello, World"
go
// 直接声明字符串数据类型使用反引号
var str1 string = `Hello, World
This is a multiline string.`

// 使用类型推断的方式声明字符串数据类型
var str2 = `Hello, World
This is a multiline string.`

// 简短定义的方式声明字符串数据类型
str3 := `Hello, World
This is a multiline string.`

示例:

go
package main

import "fmt"

func main() {
	// 定义单行字符串语法格式
	str1 := "Hello, World!"
	// 定义多行字符串语法格式
	str2 := `
	Hello, World!
	你好, 世界!
	`
	fmt.Println(str1, str2)
}

常用字符转义

以下就是一些常用的字符转义:

转义字符含义
\a响铃
\b退格
\f换页
\n换行
\r回车
\t制表符
\v纵向制表符
\反斜杠
\xhh十六进制转义字符(hh 表示两位十六进制数字)
\ddd八进制转义字符(ddd 表示三位八进制数字)

示例:

go
package main

import "fmt"

func main() {
	str1 := "hello\aworld" // \a 响铃
	fmt.Println(str1)
	str1 = "hello\bworld" // \b 退格
	fmt.Println(str1)
	str1 = "hello\fworld" // \f 换页
	fmt.Println(str1)
	str1 = "hello\nworld" // \n 换行
	fmt.Println(str1)
	str1 = "hello\rworld" // \r 回车
	fmt.Println(str1)
	str1 = "hello\tworld" // \t 制表符
	fmt.Println(str1)
	str1 = "hello\vworld" // \v 纵向制表符
	fmt.Println(str1)
	str1 = "hello\"world" // \ 斜杠
	fmt.Println(str1)
	str1 = "打印字母 'A' 的十六进制转义字符:\x41"
	fmt.Println(str1)
	str1 = "打印希腊字母 'α' 的十六进制转义字符:\u03b1"
	fmt.Println(str1)
	str1 = "打印一个自定义的十六进制字符:\xff"
	fmt.Println(str1)
	str1 = "打印字母 'A' 的八进制转义字符:\101"
	fmt.Println(str1)
	str1 = "打印希腊字母 'α' 的八进制转义字符:\316\261"
	fmt.Println(str1)
	str1 = "打印一个自定义的八进制字符:\377"
	fmt.Println(str1)
}

提示

在 Go 语言中使用最多的字符转义是 \n,表示换行。其他的字符转义,请参考字符转义

字符串拼接

使用 + 操作符来拼接字符串。

示例:

go
package main

import (
	"fmt"
)

func main() {
	// 字符串拼接,只能是字符串类型(其他数据类型需要转换成字符串类型再进行拼接).
	str1 := "hello"
	str2 := "world"
	r1 := str1 + str2
	fmt.Printf("r1类型:%T,r1的值:%s\n", r1, r1)
}

可以使用 fmt.Sprintf() 函数来拼接字符串。

示例:

go
package main

import "fmt"

func main() {
	// 使用fmt.Sprintf()函数来进行字符串拼接
	var str = "hello"
	var str2 = "world"
	// 返回的是按照格式拼接好的字符串
	info1 := fmt.Sprintf("%s %s", str, str2)
	fmt.Println(info1)
	info2 := fmt.Sprintf("%s , %s", str, str2)
	fmt.Println(info2)
}

字符串长度

可以通过 len() 函数获取字符串长度。

示例:

go
package main

import "fmt"

func main() {
	// len函数获取字符串长度
	s1 := "hello world"
	// 这个字符串包含 12 个字符(包括空格)
	// 在 UTF-8 编码下,每个字符占用 1 个字节
	// 因此这个字符串的总大小为 12 个字节
	fmt.Println(len(s1))
}

比较字符串内容

可以使用 ==!= 操作符来对字符串进行比较。

go
package main

import (
	"fmt"
)

func main() {
	// 字符串比较
	s1 := "hello"
	s2 := "hello"
	s3 := "world"
	fmt.Println(s1 == s2) // true
	fmt.Println(s1 == s3) // false
	fmt.Println(s1 != s2) // false
	fmt.Println(s1 != s3) // true
}

字符串切片

在Go语言中,字符串是由字节组成的序列。可以使用切片操作符([])来获取字符串的子串。切片操作符的语法为 s[start:end],其中 start 是起始索引(包含),end 是结束索引(不包含)。如果省略 start,则默认从字符串的开头开始;如果省略 end,则默认到字符串的末尾结束。

示例:

go
package main

import "fmt"

func main() {
	// 定义一个字符串
	s1 := "hello world!"
	// 获取子字符串 "hello"
	sub1 := s1[0:5] // 从索引0开始,到索引5结束,但不包含索引5
	fmt.Println(sub1)
	// 获取子字符串 "world!"
	// sub2 := s1[6:12] // 从索引6开始,到索引12结束,但不包含索引12
	// sub2 := s1[6:] // 从索引6开始,到字符串末尾结束
	sub2 := s1[6:len(s1)] // 从索引6开始,到字符串末尾结束,不包含最后的索引
	fmt.Println(sub2)
}

字符串格式化

可以使用 fmt 包中的 Sprintf() 函数来格式化字符串。

示例:

go
package main

import "fmt"

func main() {
	// 字符串格式化
	str := fmt.Sprintf("Hello, %s\n", "world")
	fmt.Println(str)
}

参考资料

根据 MIT 许可证发布