字符串
字符型
Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存,且使用单引号包裹。
字符类型可以以d%打印为整型。 1
2
3
4
5
6
7
8
9var c1 byte = 'a'
var c2 byte = '0'
fmt.Println("c1=", c1) //输出 97
fmt.Println("c2=", c2) //输出48
fmt.Printf("c1=%c,c2=%c\n", c1, c2) //输出原值 a 0
//var c3 byte = '北'
//fmt.Printf("c3=%c", c3) //溢出错误
基本使用
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也 就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的。
字符串在Go语言中是基本类型,内容在初始化后不能修改。Go中的字符串都是采用UTF-8字符集编码,使用一对双引号("")或反引号定义。
使用``可以额外解析换行,即其没有字符转义功能。
1 | str := "Hello " |
字符串修改
Go中的字符串不可改变,有两种修改办法:
办法一:通过转换为[]byte类型,构造一个临时字符串 1
2
3
4str := "hello"
strTemp := []byte(str)
strTemp[0] = 'c';
strResult := string(strTemp)
办法二:字符串可以进行切片操作 1
2str := "hello"
str = "c"+ str[1:] // 1: 表示从第1位开始到最后
Go和Java等语言一样,字符串默认是不可变的,这样保证了线程安全,大家使用的都是只读对象,无须加锁,且能很方便的共享内存,不必使用写时复制。
字符串遍历
遍历方式一:使用字节数组,注意每个中文在UTF-8中占据3个字节 1
2
3
4str := "hello"
for i := 0; i < len(str); i++ {
fmt.Println(i,str[i])
}
遍历方式二:range关键字只是第一种遍历方式的简写 1
2
3
4str := "你好"
for i,ch := range str {
fmt.Println(i,ch)
}
注意:Unicode字符遍历需要使用range,原因见len()函数部分讲解。
字符串转换
字符串转化的函数在strconv中,如下也只是列出一些常用的:
- Append 系列函数将整数等转换为字符串后,添加到现有的字节数组中。
1 |
|
Format 系列函数把其他类型的转换为字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import (
"fmt"
"strconv"
)
func main() {
a := strconv.FormatBool(false)
b := strconv.FormatFloat(123.23, 'g', 12, 64)
c := strconv.FormatInt(1234, 10)
d := strconv.FormatUint(12345, 10)
e := strconv.Itoa(1023)
fmt.Println(a, b, c, d, e)
}Parse 系列函数把字符串转换为其他类型
1 |
|
len()函数
len()函数是go语言的内建函数,可以用来获取切片、字符串、通道等的长度。
1 |
|
第一个函数输出11很容易理解,第二个函数却输出了9,理论上我们会认为应该是3才对。这时因为Go的字符串都是以UTF-8格式保存,每个中文占据3个字节。Go中计算UTF-8字符串格式的长度应该使用utf8.RuneCountInString
。
字符串索引
1 | package main |
- strings.Index: 正向搜索字符串
- strings.LastIndex: 反向搜索字符串
字符串连接
使用+
能够连接字符串。但是该操作并不高效。Go中也拥有类似Java的StringBuilder机制来进行高效字符串连接: 1
2
3
4
5
6
7
8
9
10
11
12str1 := "hellow"
str2 := " world"
//创建字节缓冲
var stringBuilder bytes.Buffer
//把字符串写入缓冲
stringBuilder.WriteString(str1)
stringBuilder.WriteString(str2)
//将缓冲以字符串形式输出
fmt.Println(stringBuilder.String())
注意:bytes.Buffer可以写入各种字节数组,字符串也是一种字节数组。
其他操作
1 | //查找s在字符串str中的索引 |