golang 中strings包的Replace的使用说明

【字号: 日期:2022-08-08浏览:41作者:雯心
函数声明为:

func Replace(s, old, new string, n int) string官方描述为:

返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。

示例代码为,每行的结果见每行上面的注释部分:

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

func Contains(s, substr string) bool

判断字符串s是否包含子串substr。

fmt.Println(strings.Contains('seafood', 'foo')) //trueJoin

func Join(a []string, sep string) string

将一系列字符串连接为一个字符串,之间用sep来分隔。

s := []string{'foo', 'bar', 'baz'}fmt.Println(strings.Join(s, ', ')) //foo, bar, bazIndex

查找子串的位置

func Index(s, sep string) int

子串sep在字符串s中第一次出现的位置,不存在则返回-1。

fmt.Println(strings.Index('chicken', 'ken')) //4fmt.Println(strings.Index('chicken', 'dmr')) //不包含子串返回-1 Repeat

func Repeat(s string, count int) string

返回count个s串联的字符串。

fmt.Println('ba' + strings.Repeat('na', 2)) //bananaSplit

以指定的分隔符拆分,返回一组切片

func Split(s, sep string) []string

用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,

即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。

fmt.Printf('%qn', strings.Split('a,b,c', ',')) //%q 输出格式为:带引号的字符串fmt.Printf('%qn', strings.Split('a man a plan a canal panama', 'a '))fmt.Printf('%qn', strings.Split(' xyz ', ''))fmt.Printf('%qn', strings.Split('', 'Bernardo O’Higgins'))

Output:

['a' 'b' 'c']['' 'man ' 'plan ' 'canal panama'][' ' 'x' 'y' 'z' ' '][''] //若分隔符在原字符串中不存在,返回原字符串切片Trim

去掉两端的字符

func Trim(s string, cutset string) string

返回将s前后端==所有==cutset包含的utf-8码值都去掉的字符串。

fmt.Println(strings.Trim(' !!! Achtung! Achtung! !!! ', '! ')) // Achtung! Achtung// 会去掉字符串两端所有的'!'和' 'Fields

去掉空格,把元素放入切片中

func Fields(s string) []string

返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)

分割的多个字符串。如果字符串全部是空白或者是空字符串的话,会返回空切片。

fmt.Printf('Fields are: %q', strings.Fields(' foo bar baz '))// Fields are: ['foo' 'bar' 'baz']

以上为个人经验,希望能给大家一个参考,也希望大家多多支持乐呵呵网。如有错误或未考虑完全的地方,望不吝赐教。

标签: Golang
相关文章: