string的使用
# 一、字符串(string)
# 1.1 什么是string
Go
中的字符串是一个字节的切片.可以通过将其内容封装在""
中来创建字符串.Go
中的字符串是Unicode
兼容的,并且是UTF-8
编码的.
package main
import (
"fmt"
)
func main() {
name := "Hello World"
fmt.Println(name)
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 1.2 string的使用
# 1.2.1 访问字符串中的单个字节
package main
import (
"fmt"
)
func main() {
name := "Hello World"
for i:= 0; i < len(s); i++ {
fmt.Printf("%d ", s[i])
}
fmt.Printf("\n")
for i:= 0; i < len(s); i++ {
fmt.Printf("%c ",s[i])
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
运行结果:
72 101 108 108 111 32 87 111 114 108 100
H e l l o W o r l d
1
2
2
# 1.3.综合示例代码
package main
import "fmt"
func main() {
/*
Go中的字符串是一个字节的切片.
可以通过将其内容封装在""中来创建字符串.Go中的字符串是Unicode兼容的,并且是UTF-8编码的.
字符串是一些字符的集合.
理解为一个字符的序列.
每个字符都有固定的位置(索引,下标,index: 从0开始,到长度减1)
语法: "",``
""
"a","b","中"
字符: --->对应编码表中的编码值
A--->65
B--->66
a--->97
...
字节: byte--->uint8
utf8
*/
//1.定义字符串
s1 := "hello"
s2 := "hello world"
fmt.Println(s1)
fmt.Println(s2)
//2.字符串的长度: 返回字节的个数
fmt.Println(len(s1)) //因为字符每个字符占1个字节,中文字符每个字符占3个字节
fmt.Println(len(s2))
//3.获取某个字节
fmt.Println(s2[0]) //获取字符传中的第一个字节
a := 'h'
b := 104
fmt.Printf("%c,%c,%c\n", s2[0], a, b)
//4.字符串的遍历
for i := 0; i < len(s2); i++ {
//fmt.Println(s2[i])
fmt.Printf("%c\t", s2[i])
}
//for range
//for _, v := range s2 {
// //fmt.Println(i, v)
// fmt.Printf("%c\t", v)
//}
//5.字符串是字节的集合
slice1 := []byte{65, 66, 67, 68, 69}
s3 := string(slice1) //根据一格字节切片,构建字符串
fmt.Println(s3)
s4 := "abcdef"
slice2 := []byte(s4) //根据字符串,获取对应的字节切片
fmt.Println(slice2)
//6.字符串不能修改
fmt.Println(s4)
//s4[2] = "B" // cannot assign to s4[2] (value of type byte) 字符串是不允许修改的
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 二、strings包的使用
# 示例代码
package main
import (
"fmt"
"strings"
)
func main() {
/*
strings包下的关于字符串的函数
*/
s1 := "helloworld"
//1.是否包含指定的内容--->bool
fmt.Println(strings.Contains(s1, "abc"))
//2.是否包含chars中任意的一个字符即可
fmt.Println(strings.ContainsAny(s1, "abcd"))
//3.统计substr在s中出现的次数
fmt.Println(strings.Count(s1, "llo"))
//4.以xxx前缀开头,以xxx后缀结尾
s2 := "20220525课堂笔记.txt"
if strings.HasPrefix(s2, "202205") {
fmt.Println("2022年5月的文件...")
}
if strings.HasSuffix(s2, ".txt") {
fmt.Println("文本文档...")
}
//索引
//helloworld
fmt.Println(strings.Index(s1, "l")) // 查找substr在s中的位置,如果不存在就返回-1
fmt.Println(strings.IndexAny(s1, "abcdh")) //查找charts中任意的一个字符,出现在s中的位置
fmt.Println(strings.LastIndex(s1, "l")) //查找substr在s中最后一次出现的位置
//字符串的拼接
ss1 := []string{"abc", "world", "hello", "ruby"}
s3 := strings.Join(ss1, "*")
fmt.Println(s3)
//切割
s4 := "123,456,aaa,49595,45"
ss2 := strings.Split(s4, ",")
//fmt.Println(ss2)
for i := 0; i < len(ss2); i++ {
fmt.Println(ss2[i])
}
//重复,自己拼接自己count次
s5 := strings.Repeat("hello", 5)
fmt.Println(s5)
//替换
//helloworld
s6 := strings.Replace(s1, "l", "*", 1) // 末尾给定的数字,代表需要替换的次数,"-1"代表无效的,会对所有匹配的进行替换
fmt.Println(s6)
s7 := "heLLO WOrlD**123..."
fmt.Println(strings.ToLower(s7))
fmt.Println(strings.ToUpper(s7))
/*
截取子串:
substring(start:end) ---> substr
str[start:end] ---> substr
包含str,不包含end下标
*/
fmt.Println(s1)
s8 := s1[0:5]
fmt.Println(s8)
s9 := s1[5:]
fmt.Println(s9)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 三、strconv包的使用
# 示例代码
package main
import (
"fmt"
"strconv"
)
func main() {
/*
strconv包: 字符串和几倍你类型之间的转换
string convert
strconv:
i, err := strconv.Atoi("-42") //转成数字类型
s := strconv.Itoa(-42) // 转换成字符串类型
*/
//fmt.Printf("aa" + 100)
//1.bool类型
s1 := "true"
b1, err := strconv.ParseBool(s1)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%T,%t\n", b1, b1)
ss1 := strconv.FormatBool(b1)
fmt.Printf("%T,%s\n", ss1, ss1)
//2.整数
s2 := "100"
i2, err := strconv.ParseInt(s2, 10, 64) // 这里的"base"代表需要转成2进制,8进制,10进制等类型的数据
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%T,%d\n", i2, i2)
ss2 := strconv.FormatInt(i2, 10)
fmt.Printf("%T.%s\n", ss2, ss2)
//itoa()atoi()
i3, err := strconv.Atoi("-42") //转为int类型
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%T,%d\n", i3, i3)
i4 := strconv.Itoa(-42) //转为字符串类型
fmt.Printf("%T,%s\n", i4, i4)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
上次更新: 2024/04/09, 16:48:42
- 01
- AWS NAT-NetWork-Firwalld配置(一)04-09
- 02
- AWS NAT-NetWork-Firwalld配置(二)04-09
- 03
- kubernetes部署minio对象存储01-18