一、查找与替换 - 定性查找
- 所谓“定性查找”就是指返回有(true)和无(false)的查找。
- bytes包和strings包提供了一组名字相同的定性查找API,包括Contains系列、HasPrefix和HasSuffix。
Contains函数
- Contains函数返回的是第一个参数代表的字符串/字节切片中是否包含第二个参数代表的字符串/字节切片。
- 值得注意的是,在这个函数的语义中,任意字符串都包含空串(“”),任意字节切片也都包含空字节切片 ([]byte)及nil切片。
ContainsAny函数
ContainsAny函数的语义:
- 将其两个参数看成两个Unicode字符的集合。
- 如果两个集合存在不为空的交集,则返回true。
- 以 strings.ContainsAny("Golang", "java") 为例。 第一个参数对应的Unicode字符集合为{'G','o','l','a','n','g'} 。
- 第二个参数对应的集合为{'j','a','v','a'} 两个集合存在不为空的交集{a}了,因此该函数返回true。
ContainsRune函数
ContainsRune函数的语义:
- 用于判断某—个Unicode字符(以码点形式即rune类型值传入)是否包含在第一个参数代表的字符串或字节切片中。
HasPrefix和HasSuffix函数
- HasPrefix函数用于判断第二个参数代表的字符串/字节切片是不是第一个参数的前缀。
- HasSuffix函数用于判断第二个参数是不是第一个参数的后缀。
- 要注意的是,在这两个函数的语义中,空字符串 ("")是任何字符串的前缀和后缀。
- 空字节切片([]byte{}) 和nil切片也是任何字节切片的前缀和后缀。
二、查找与替换 - 定位查找
- 定位查找函数会给出第二个参数代表的字符串/字节切片在第一个参数中第一次出现的位置(下标),如果没有找到,则返回-1。
- 另外定位查找还有方向性,从左到右为正向定位查找(Index系列),反之为反向定位查找(LastIndex系列)。
- 和 ContainsAny 只查看交集是否为空不同,IndexAny函数返回非空交集中第一个字符在第一个参数中的位置信息。
- 反向查找空串或nil切片,返回的是第一个参数的长度,但作为位置(下标)信息,这个值己经越界了。
- strings包并未提供模糊查找功能,基于正则表达式的模糊查找可以使用标准库在regexp包中提供的实现。
三、查找与替换 - 替换
- strings包中提供了两种进行字符串替换的方法:Replace函数与 Replacer类型。
- bytes包中则只提供了Replace函数用于字节切片的替换。
- Replace函数广泛用于简单的字符串/字节切片替换。
- 最后一个参数是一个整型数,用于控制替换的次数。
- 如果传入-1,则全部替换。
- ReplaceAll函数本质上等价于最后一个参数传入-1的Replace函数。
- Replacer类型实例化时可以传入多组old和new参数,后续在使用Replacer.Replace方法对原字符串进行替换时,可以一次实施多组不同字符串的替换。