字符串处理
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)
}