引入 —— 字符类型
在 Go 语言中支持两种字符类型,
-
byte类型,实际上是一个uint8类型,代表一个ASCII码字符
-
rune类型,实际上是一个int32类型,代表一个UTF-8字符
三种引号
-
单引号
'
用于表示一个rune字符
-
双引号
"
用于表示一个字符串,支持转义,不支持多行
-
反引号 `
用于表示一个字符串,不支持转义,支持多行,通常用于表示一些正则表达式、html、json等语句
'a'与"a"是不能比较的,因为前者是一个rune字符而后者是一个字符串 "a"与`a`是可以比较的,且此时两者相等
字符串本质
字符串的本质是一个由字符组成的只读
数组,并且每个元素默认是byte类型字符。因此对于中文字符串,在做截取的时候,需要先将其转化成rune类型的字符数组,如下:
str := "中文"
fmt.Printf("%T\n", str)
fmt.Println(str[0])
fmt.Println(len(str))
rStr := []rune(str)
fmt.Println(rStr[0])
fmt.Println(string(rStr[0]))
fmt.Println(len(rStr))
输出:
string 228 6 20013 中 2
常用转义字符
修改字符串
若想要修改字符串,则需先将其转化成一个byte类型或rune类型切片
str := "abc"
slice := []byte(str)
slice[0] = 'A'
new_str := string(slice)
fmt.Println(new_str)
输出:
Abc
str := "哈哈哈"
slice := []rune(str)
slice[2] = '嘿'
new_str := string(slice)
fmt.Println(new_str)
输出:
哈哈嘿
常用操作
-
长度
len()
获取的是以字节为单位的长度,因此要获取中文字符串长度,需要用utf8.RuneCountInString
-
转化
字符串转整数:
i, err := strconv.Atoi()
整数转字符串:
str := strconv.Itoa()
切片转字符串:
str := string([]byte{1,2,3})
进制转化:
str := strconv.FormatInt(i int, base b)
-
子串判断
var judge bool = strings.Contains(str,sub_str string)
-
子串计数
var counts int = strings.Count(str, sub_str string)
-
比较
区分大小写的比较使用:
==
不区分大小写的比较使用:
strings.EqualFold(str1, str2 string)
-
寻找子串
寻找字符串第一次出现的位置 ,不存在返回-1:
strings.Index(s,str string)
寻找一个字符在字符串中最后一次返回的位置 :
strings.LastIndex(s,str)
-
替换
将s中的前n个oldstr替换为newstr,n为-1时替换所有
strings.Replace(s,oldstr,newstr,n)
-
分割
string[] = strings.Split(s,str)
得到一个字符串数组 -
剔除
strings.Trim (s, str string)
将s两边的str剔除 -
判断是否以str开头或结尾
strings.HasPrefix(s,str)
strings.HasSuffix(s,str)
-
连接
-
原生
+
-
fmt.Sprintf("%s%s", str1, str2)
-
strings.Builder
var builder strings.Builder builder.WriteString("abc") builder.String()
-
bytes.Buffer
buf := new(bytes.Buffer) buf.WriteString("abc") buf.String()
-
strings.Join([]string, string)
-
切片append
-