File tree 1 file changed +61
-0
lines changed
1 file changed +61
-0
lines changed Original file line number Diff line number Diff line change 1
1
# 2.1 strings — 字符串操作 #
2
2
3
+ 字符串常见操作有:
4
+
5
+ - 字符串长度;
6
+ - 求子串;
7
+ - 是否存在某个字符或子串;
8
+ - 子串出现的次数;
9
+ - 字符串分割(切分)为[ ] string;
10
+ - 是否存在某个前缀或后缀;
11
+ - 字符或子串在字符串中的首次出现的位置或最后一次出现的位置;
12
+ - 通过某个字符串将[ ] string连接起来;
13
+ - 字符串重复几次;
14
+ - 字符串中子串替换;
15
+ - 大小写转换;
16
+ - Trim操作;
17
+ - ...
18
+
19
+ 前面已经说过,由于string类型可以看成是一种特殊的slice类型,因此获取长度可以用内置的函数len;同时支持 切片 操作,因此,子串获取很容易。
20
+
21
+ 其他的字符串常见操作就是我们这小节要介绍的,由于这些操作函数的使用比较简单,只会对某些函数举例说明;但会深入这些函数的内部实现,更好的掌握它们。
22
+
23
+ 说明:这里说的字符,值得是 rune 类型,即一个 UTF-8 字符(Unicode 代码点)。
24
+
25
+ ## 2.1.1 是否存在某个字符或子串 ##
26
+
27
+ 有三个函数做这件事:
28
+
29
+ // 子串substr在s中,返回true
30
+ func Contains(s, substr string) bool
31
+ // chars中任何一个Unicode代码点在s中,返回true
32
+ func ContainsAny(s, chars string) bool
33
+ // Unicode代码点r在s中,返回true
34
+ func ContainsRune(s string, r rune) bool
35
+
36
+ 这里对 ContainsAny 函数进行一下说明,看如下例子:
37
+
38
+ fmt.Println(strings.ContainsAny("team", "i"))
39
+ fmt.Println(strings.ContainsAny("failure", "u & i"))
40
+ fmt.Println(strings.ContainsAny("in failure", "s g"))
41
+ fmt.Println(strings.ContainsAny("foo", ""))
42
+ fmt.Println(strings.ContainsAny("", ""))
43
+
44
+ 输出:
45
+
46
+ false
47
+ true
48
+ true
49
+ false
50
+ false
51
+
52
+ 也就是说,第二个参数 chars 中任意一个字符(Unicode Code Point)如果在第一个参数 s 中存在,则返回true。
53
+
54
+ 查看这三个函数的源码,发现它们只是调用了相应的Index函数(子串出现的位置),然后和 0 作比较返回true或fale。如,Contains:
55
+
56
+ func Contains(s, substr string) bool {
57
+ return Index(s, substr) >= 0
58
+ }
59
+
60
+ 关于Index相关函数的实现,我们后面介绍。
61
+
62
+ ## 2.1.2 子串出现次数 ##
63
+
3
64
4
65
5
66
# 导航 #
You can’t perform that action at this time.
0 commit comments