字符串
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型一样,go语言字符串的内部实现用utf-8编码,字符串的值为双引号””中的内容,可以在go语言的源码中直接添加非ASCII码字符
字符串的转义
\r 回车 \n 换行 \t 制表符 \’ 单引号 \” 双引号 \ 反斜杠
多行字符串
Go语言中要定一个多行字符串时,要用反引号``
package main
import "fmt"
func main() {
s := `
君不见
黄河之水天上来
奔流到海不复回
`
fmt.Print(s)
}
字符串常见的操作
package main
import (
"fmt"
"strings"
)
func main() {
s := "sdfasdfa"
//求长度
fmt.Println(len(s)) //8
//拼接字符串
ss := s + "sdfasdf"
fmt.Println(ss)
fmt.Sprintln(s, ss) //sdfasdfasdfasdf
//以什么什么字符分割,
arr := strings.Split(ss, "a")
fmt.Printf("%v\n", arr) //[sdf sdf sdf sdf]
//判断是否包含
b := strings.Contains(ss, "sdf")
fmt.Printf("%T--%v\n", b, b) //bool--true
//判断以什么什么开头
b1 := strings.HasPrefix(ss, "sdf")
fmt.Printf("%T--%v\n", b1, b1) //bool--true
//判断以什么什么结尾
b2 := strings.HasSuffix(ss, "sdf")
fmt.Printf("%T--%v\n", b2, b2) //bool--true
//子串出现的位置
i := strings.Index(ss, "a")
fmt.Printf("%T--%v\n", i, i) //int--3
//join操作
s1 := strings.Join(arr, "00")
fmt.Printf("%T--%v\n", s1, s1) //string--sdf00sdf00sdf00sdf
}
byte和rune类型
组成字符串的每一个元素叫做字符,通过遍历或者单个获取字符串元素获得字符。
Go语言的字符有以下两种,
package main
import (
"fmt"
)
func main() {
s := "sdfasdfa"
//遍历字符串
for _, sss := range s {
fmt.Print(string(sss))
}
}
uint8类型,也叫byte代表ASCII的一个字符
int32类型,也叫rune代表一个UTF-8字符
当需要处理中文,日文等复合字符时,则需要rune类型,rune类型实际上是int32
Go使用了特殊的类型处理Unicode,让其基于Unicode的文本处理更为方便,可以用byte进行默认字符串处理,性能和扩展性都有照顾
修改字符串
要修改字符串,需要先将其转换成[]rune或者[]byte,完成后再换成string,无论哪种转换,都重新分配内存,并复制字节数组
package main
import (
"fmt"
)
func main() {
s := "sdfasdfa"
ss := []rune(s)
ss[4] = '董'
fmt.Println(string(ss))
}