-
Notifications
You must be signed in to change notification settings - Fork 0
/
第 04.07.01 章、strings 包
245 lines (139 loc) · 6.06 KB
/
第 04.07.01 章、strings 包
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
总览
strings 包实现了简单的函数,来操作 UTF-8 编码的字符串
关于 Go 中的 UTF-8 字符串,参见 https://blog.golang.org/strings
-------- 第一大类 匹配与定位 --------
HasPrefix(str, pre string) bool
HasSufix(str, su string) bool
判断一个一个字符串 str 是否以 字符串 pre/su 作为开头/结尾
Compare(a,b string) int
返回一个整数,在按字典顺序比较两个字符串之后
若 a == b,结果为 0
若 a < b,结果为 -1
若 b > b,结果为 1
Contains(str, substr string) bool
判断一个字符串 str 是否包含一个字符串 substr
ContainsAny(str, chars string) bool
判断一个字符串 str 是否包含字符串 chars 中的一个或多个字符
ConstainsRune(str string, r rune) bool
判断一个字符串 str 中,是否包含一个 Unicode 字符 r
Count(str, sep string) int
判断一个字符串 str 中,出现了多少个字符串 sep
若 seq 为空,则返回 unicode点数+1 的数据
EqualFold(s, t string) bool
报告 s 和 t 作为 UTF-8 字符串,是否在 Unicode case-folding(转换为小写) 下等价
Index(s, sep string) int
string.IndexAny(s, chars string) int
IndexByte(s string, c byte) int
string.IndexRune(s string, r rune) int
string.IndexFunc(s string, f func(rune) bool) int
在字符串 s 中寻找指定的 字符串 sep
若寻找成功返回第一个找到的位置的索引
若不成功则返回 -1
具体函数作用对象与用法仿照上文函数
LastIndex(s, sep string) int
LastIndexAny(s, chars string) int
LastIndexByte(s string, c byte) int
LastIndexFunc(s string, f func(rune) bool) int
同上,查找最后一个匹配上的
注意没有 LastIndexRune 这个函数
-------- 第二大类 字符串的切片与拼接 --------
Fields(str string) []string
通过 unicode.IsSpace 判断出的空白字符
将文本切片为不含空白字符的 字符串 slice
FieldsFunc(s string, f func(rune) bool) []string
自定义切片法则函数 f func(rune) bool
将文本切片为不含 rune 字符的 字符串 slice
Split(s, sep string) []string
SplitN(s, sep string, n int) []string
将字符串切片,与 Field 不同的是,
若有连续的 sep 字符串出现
则仅将第一个 sep 省略
其他的 sep 以空字符的形式出现在 输出的 slice 中
n 表示将返回的切片的长度
n = 0 表示返回的是 nil
n > 0 表示返回 n 个切片,若 n 小于需要切片的个数,则最后一个切片为剩余所有的字符串
n < 0 表示使用全部的切片
SplitAfter(s, sep string) []string
SplitAfterN(s, sep string) []string
向后切片
切口的位置在 sep 与后一个字符之间
sep 与前一个字符串一同输出为同一个字符串
Join(a []string, sep string) string
用字符串 sep 作为间隔,将字符串 slice a 连接为一个字符串
-------- 第三大类 字符的大小写转化 --------
Title(s string) string
将每个单词的首字母转换为标题大小写
ToTitle(s string) string
将每个单词的每个字母转换为标题大小写
ToTitleSpecial(c unicode.SpecialCase, s string) string
特定语言环境下的大写转换
ToLower(s string) string
ToLowerSpecial(c unicode.SpecialCase, s string) string
ToUpper(s string) string
ToUpperSpecial(c unicode.SpecialCase, s string) string
全字符转换为大写/小写
------- 第四大类 字符的替换、映射和重复 --------
Map(mapping func(rune) rune, s string) string
定义一个映射的规则,重映射一组字符串
Repeat(s string, count int) string
将一个字符串重复 count 次,并输出
Replace(s old, new string, n int) string
将字符串中的指定字符串替换为新的字符串,且仅替换前 n 个
若 n<0,则忽略个数的限制
-------- 第五大类 字符的修剪 --------
Trim(s, cutset string) string
若字符串 s 的首尾,含有 字符串 cutset 中的字符
则全部移除
TrimFunc(s string, f func(rune) bool) string
自定义首位字符移除判断方式
TrimLeft(s, cutset string) string
TrimLeftFunc(s string, f func(rune) bool) string
TrimRight(s, cutset string) string
TrimRightFunc(s string, f func(rune) bool) string
同上,分别为 左切、自定义规则左切、右切、自定义规则右切
TrimSpace(s, cutset string) string
移除首尾空白字符
TrimPrefix(s, prefix string) string
TrimSuffix(s, prefix string) string
匹配并移除首/尾指定的字符串
-------- Reader struct 类型 --------
Reader 类型实现了从字符串读取的
io.Reader io.ReaderAt io.Seeker io.WriterTo io.ByteScanner io.RuneScanner 接口
type Reader struct {
// 包含过滤的或未导出的字段
}
NewReader(s string) *Reader
返回一个新的 Reader,将从 s 中读取
它与 bytes.NewBufferString 类似,但更加高效,并且是只读的
(r *Reader) Len() int
返回字符串中还未读取的字节数量
(r *Reader) Read(b []byte) (n int, err error)
(r *Reader) ReadAt(b []byte, off int64) (n int, err error)
(r *Reader) ReadByte() (byte, error)
(r *Reader) ReadRune() (ch rune, size int, err error)
(r *Reader) Reset(s string)
将 Reader 重置为将要读取 s 的状态
(r *Reader) Seek(offset int64, whence int) (int64, error)
实现了 io.Seeker 接口
(r *Reader) Size() int64
返回底层字符串的原始长度
本方法的返回的是 ReadAt 方法可使用的字节数量
(r *Reader) UnreadByte() error
(r *Reader) UnreadRune() error
(r *Reader) WriteTo(w io.Writer) (n int64, err error)
-------- Replacer struct 类型 --------
将列表中的一系列字符串做替换
它在被多 goroutine 使用时是并发安全的
type Replacer struct {
// 包含过滤的或者未导出的字段
}
NewReplacer(oldnew ...string) *Replacer
从一个 新旧字符串对的列表中,返回一个 Replacer
替换按照顺序执行,并不会重叠匹配
EG.
r := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(r.Replace("This is <b>HTML</b>!"))
(r *Replacer) Replace(s string) string
返回一份字符串 s 的备份,且所有的替换都已经执行了
(r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
将 s 写入 w 中,且执行了所有的替换