函数声明为:
1
|
func Replace(s, old, new string, n int) string |
官方描述为:
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
示例代码为,每行的结果见每行上面的注释部分:
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
|
func main() { // non-overlapping: "123" repeat 6 times in s s := "123lafaldsjglad123lkfasdf123djfal123lkdjga123lksjfla123l" old := "123" new := "888" fmt.Println("non-overlapping: ") // n < 0 ,用 new 替换所有匹配上的 old;n=-1: 888lafaldsjglad888lkfasdf888djfal888lkdjga888lksjfla888l fmt.Println("n=-1: ", strings.Replace(s, old, new, -1 )) // 不替换任何匹配的 old;n=0: 123lafaldsjglad123lkfasdf123djfal123lkdjga123lksjfla123l fmt.Println("n=0: ", strings.Replace(s, old, new, 0 )) // 用 new 替换第一个匹配的 old;n=1: 888lafaldsjglad123lkfasdf123djfal123lkdjga123lksjfla123l fmt.Println("n=1: ", strings.Replace(s, old, new, 1 )) // 用 new 替换前 5 个匹配的 old(实际多于 5 个);n=5: 888lafaldsjglad888lkfasdf888djfal888lkdjga888lksjfla123l fmt.Println("n=5: ", strings.Replace(s, old, new, 5 )) // 用 new 替换前 7 个匹配上的 old(实际没那么多);n=7: 888lafaldsjglad888lkfasdf888djfal888lkdjga888lksjfla888l fmt.Println("n=7: ", strings.Replace(s, old, new, 7 )) // overlapping: s = "888888888888888888" old = "888" new = "666" fmt.Println("overlapping: ") // n < 0 ,用 new 替换所有匹配上的 old;n=-1: 666666666666666666 fmt.Println("n=-1: ", strings.Replace(s, old, new, -1 )) // 不替换任何匹配的 old;n=0: 888888888888888888 fmt.Println("n=0: ", strings.Replace(s, old, new, 0 )) // 用 new 替换第一个匹配的 old;n=1: 666888888888888888 fmt.Println("n=1: ", strings.Replace(s, old, new, 1 )) // 用 new 替换前 5 个匹配的 old(实际多于 5 个);n=5: 666666666666666888 fmt.Println("n=5: ", strings.Replace(s, old, new, 5 )) // 用 new 替换前 7 个匹配上的 old(实际没那么多);n=7: 666666666666666666 fmt.Println("n=7: ", strings.Replace(s, old, new, 7 )) } |
补充:golang_字符串操作: strings包中Contains,Join,Index,Repeat,Split,Trim,Fields的用法介绍
字符串处理
Contains
1
|
func Contains(s, substr string) bool |
判断字符串s是否包含子串substr。
1
|
fmt.Println(strings.Contains("seafood", "foo")) //true |
Join
1
|
func Join(a []string, sep string) string |
将一系列字符串连接为一个字符串,之间用sep来分隔。
1
2
|
s := []string{"foo", "bar", "baz"} fmt.Println(strings.Join(s, ", ")) //foo, bar, baz |
Index
查找子串的位置
1
|
func Index(s, sep string) int |
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
1
2
|
fmt.Println(strings.Index("chicken", "ken")) //4 fmt.Println(strings.Index("chicken", "dmr")) //不包含子串返回-1 |
Repeat
1
|
func Repeat(s string, count int) string |
返回count个s串联的字符串。
1
|
fmt.Println("ba" + strings.Repeat("na", 2)) //banana |
Split
以指定的分隔符拆分,返回一组切片
1
|
func Split(s, sep string) []string |
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,
即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。
1
2
3
4
|
fmt.Printf("%q\n", strings.Split("a,b,c", ",")) //%q 输出格式为:带引号的字符串 fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) fmt.Printf("%q\n", strings.Split(" xyz ", "")) fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) |
Output:
1
2
3
4
|
["a" "b" "c"] ["" "man " "plan " "canal panama"] [" " "x" "y" "z" " "] [""] //若分隔符在原字符串中不存在,返回原字符串切片 |
Trim
去掉两端的字符
1
|
func Trim(s string, cutset string) string |
返回将s前后端==所有==cutset包含的utf-8码值都去掉的字符串。
1
2
3
|
fmt.Println(strings.Trim(" !!! Achtung! Achtung! !!! ", "! ")) // Achtung! Achtung // 会去掉字符串两端所有的"!"和" " |
Fields
去掉空格,把元素放入切片中
1
|
func Fields(s string) []string |
返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)
分割的多个字符串。如果字符串全部是空白或者是空字符串的话,会返回空切片。
1
2
|
fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz ")) // Fields are: ["foo" "bar" "baz"] |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/chuanglan/article/details/80749162