1 字符串的概念
在Go语言中,字符串也是一种基本类型。
相比之下, C/C++语言中并不存在原生的字符串类型,通常使用字符数组来表示,并以字符指针来传递。
var str string // 声明一个字符串变量
str = "Hello world"
ch := str[0]
fmt.Println("str的长度:", len(str))
fmt.Println("第一个字符是", ch)
字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内容不能在初始化后被修改
str := "Hello world" // 字符串也支持声明时进行初始化的做法
str[0] = 'X' // 编译错误
编译器会报类似如下的错误:cannot assign to str[0]
2 字符串的遍历
(1) 字节数组遍历
str := "Hello,世界"
n := len(str)
for i := 0; i < n; i++ {
ch := str[i] // 依据下标取字符串中的字符,类型为byte
fmt.Println(i, ch)
}
(2) Unicode字符遍历
str := "Hello,世界"
for i, ch := range str {
fmt.Println(i, ch)//ch的类型为rune
}
在Go语言中支持两个字符类型,
- byte (实际上是 uint8 的别名),代表UTF-8字符串的单个字节的值;
- rune ,代表单个Unicode字符
出于简化语言的考虑,Go语言的多数API都假设字符串为UTF-8编码
3 字符串的常用操作
方法 | 介绍 |
---|---|
len(str) | 求长度 |
strings.Split(s, sep string) []string | 分割 |
strings.Contains(s, substr string) bool | 判断是否包含 |
strings.HasPrefix(s, prefix string) bool | 前缀判断 |
strings.HasSuffix(s, suffix string) bool | 后缀判断 |
strings.Index(s, substr string) int | 子串第一次出现的位置 |
strings.LastIndex(s, substr string) int | 子串最后一次出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
strings.Count(s, substr string) int | s 中子串的个数。 |
strings.Trim(s, cutset string) string | 去掉头尾的所有在cutset里的单个字符 |
strings.TrimLeft(s, cutset string) string | 只去除左边的 |
strings.TrimPrefix(s, prefix string) string | 去除指定前缀 |
4 字符串的拼接
(1) 原生”+”
var s string
s = "asong" + "真帅"
(2) 字符串格式化函数fmt.Sprintf
实现原理是反射, 有性能损耗
str := "asong"
str = fmt.Sprintf("%s%s", str, str)
(3) strings.join
strings.join方法可以将一个string类型的切片拼接成一个字符串,可以定义连接操作符
baseSlice := []string{"asong", "真帅"}
strings.Join(baseSlice, "")
最适合用于字符串拼接的, 是基于Strings.builder
(4) strings.builder
Go语言提供了一个专门操作字符串的库strings,
使用strings.Builder可以进行字符串拼接,
提供了writeString方法拼接字符串
var builder strings.Builder
builder.WriteString("asong")
builder.String()
(5) bytes.Buffer
因为string类型底层就是一个byte数组,所以我们就可以Go语言的bytes.Buffer进行字符串拼接。
bytes.Buffer是一个一个缓冲byte类型的缓冲器,这个缓冲器里存放着都是byte。
buf := new(bytes.Buffer)
buf.WriteString("asong")
buf.String()
(6) 切片append
buf := make([]byte, 0)
base = "asong"
buf = append(buf, base...)
string(base)