Skip to content

Commit d8d58ca

Browse files
committed
strings Contains序列函数
1 parent 70702a4 commit d8d58ca

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

Diff for: chapter02/02.1.md

+61
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,66 @@
11
# 2.1 strings — 字符串操作 #
22

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+
364

465

566
# 导航 #

0 commit comments

Comments
 (0)