原创完整版:https://blog.csdn.net/chenbaoke/article/details/40318423
-
func Count(s, sep string) int
-
func Contains(s, substr string) bool // Contains 判断字符串 s 中是否包含子串 substr // 如果 substr 为空,则返回 true
-
func ContainsAny(s, chars string) bool // ContainsAny 判断字符串 s 中是否包含 chars 中的任何一个字符 // 如果 chars 为空,则返回 false
-
func ContainsRune(s string, r rune) bool // ContainsRune 判断字符串 s 中是否包含字符 r
-
func Index(s, sep string) int// Index 返回子串 sep 在字符串 s 中第一次出现的位置// 如果找不到,则返回 -1,如果 sep 为空,则返回 0。// 使用 Rabin-Karp 算法实现
-
func LastIndex(s, sep string) int // LastIndex 返回子串 sep 在字符串 s 中最后一次出现的位置// 如果找不到,则返回 -1,如果 sep 为空,则返回字符串的长度// 使用朴素字符串比较算法实现
-
func IndexAny(s, chars string) int
// IndexAny 返回字符串 chars 中的任何一个字符在字符串 s 中第一次出现的位置(字节位置)
// 如果找不到,则返回 -1,如果 chars 为空,则返回 -1 -
func SplitN(s, sep string, n int) []string
// SplitN 以 sep 为分隔符,将 s 切分成多个子串,结果中不包含 sep 本身
// 如果 sep 为空,则将 s 切分成 Unicode 字符列表。
// 如果 s 中没有 sep 子串,则将整个 s 作为 []string 的第一个元素返回
// 参数 n 表示最多切分出几个子串,超出的部分将不再切分。
// 如果 n 为 0,则返回 nil,如果 n 小于 0,则不限制切分个数,全部切分 -
func SplitAfterN(s, sep string, n int) []string
// SplitAfterN 以 sep 为分隔符,将 s 切分成多个子串,结果中包含 sep 本身
// 如果 sep 为空,则将 s 切分成 Unicode 字符列表。
// 如果 s 中没有 sep 子串,则将整个 s 作为 []string 的第一个元素返回
// 参数 n 表示最多切分出几个子串,超出的部分将不再切分。
// 如果 n 为 0,则返回 nil,如果 n 小于 0,则不限制切分个数,全部切分 -
func Split(s, sep string) []string
// Split 以 sep 为分隔符,将 s 切分成多个子切片,结果中不包含 sep 本身
// 如果 sep 为空,则将 s 切分成 Unicode 字符列表。
// 如果 s 中没有 sep 子串,则将整个 s 作为 []string 的第一个元素返回 -
func SplitAfter(s, sep string) []string
// SplitAfter 以 sep 为分隔符,将 s 切分成多个子切片,结果中包含 sep 本身
// 如果 sep 为空,则将 s 切分成 Unicode 字符列表。
// 如果 s 中没有 sep 子串,则将整个 s 作为 []string 的第一个元素返回 -
func FieldsFunc(s string, isSpace func(rune) bool) []string
// FieldsFunc 以一个或多个满足 isSpace(rune) 的字符为分隔符,遍历s中的字符,遇到符合要求的字符即isSpace()返回true则分割
// 将 s 切分成多个子串,结果中不包含分隔符本身。
// 如果 s 中没有满足 f(rune) 的字符,则返回一个空列表。 -
func Join(a []string, sep string) string
// Join 将 a 中的子串连接成一个单独的字符串,子串之间用 sep 分隔 -
func HasPrefix(s, prefix string) bool
// HasPrefix 判断字符串 s 是否以 prefix 开头 -
func Map(mapping func(rune) rune, s string) string
// Map 将 s 中满足 mapping(rune) 的字符替换为 mapping(rune) 的返回值。
// 如果 mapping(rune) 返回负数,则相应的字符将被删除。 -
func Title(s string) string
// Title 将 s 中的所有单词的首字母修改为其 Title 格式(即首字母大写)
// BUG: Title 规则不能正确处理 Unicode 标点符号 -
func TrimFunc(s string, f func(rune) bool) string
// TrimFunc 将删除 s 首尾连续的满足 f(rune) 的字符func isSlash(r rune) bool {
return r == ‘\’ || r == ‘/’
}
func main() {
s := “\\HostName\C\Windows\”
ts := strings.TrimFunc(s, isSlash)
fmt.Printf("%q\n", ts) // “HostName\C\Windows” -
func Trim(s string, cutset string) string
// Trim 将删除 s 首尾连续的包含在 cutset 中的字符,Trim都是对字符串头尾的修剪操作func main() {
s := " Hello 世界! "
ts := strings.Trim(s, " Helo!")
fmt.Printf("%q\n", ts) // “世界”
} -
func EqualFold(s, t string) bool
// EqualFold 判断 s 和 t 是否相等。忽略大小写,同时它还会对特殊字符进行转换
// 比如将“ϕ”转换为“Φ”、将“DŽ”转换为“Dž”等,然后再进行比较
// replace.go
// Replacer 根据一个替换列表执行替换操作
type Replacer struct {
Replace(s string) string
WriteString(w io.Writer, s string) (n int, err error)
}
// NewReplacer 通过“替换列表”创建一个 Replacer 对象。
// 按照“替换列表”中的顺序进行替换,只替换非重叠部分。
// 如果参数的个数不是偶数,则抛出异常。
// 如果在“替换列表”中有相同的“查找项”,则后面重复的“查找项”会被忽略
func NewReplacer(oldnew …string) *Replacer
// Replace 返回对 s 进行“查找和替换”后的结果
// Replace 使用的是 Boyer-Moore 算法,速度很快
func (r *Replacer) Replace(s string) string
func main() {
srp := strings.NewReplacer(“Hello”, “你好”, “World”, “世界”, “!”, “!”)
s := “Hello World!Hello World!hello world!”
rst := srp.Replace(s)
fmt.Print(rst) // 你好 世界!你好 世界!hello world!
}
注:这两种写法均可.
func main() {
wl := []string{"Hello", "Hi", "Hello", "你好"}
srp := strings.NewReplacer(wl...)
s := "Hello World! Hello World! hello world!"
rst := srp.Replace(s)
fmt.Print(rst) // Hi World! Hi World! hello world!
}
// WriteString 对 s 进行“查找和替换”,然后将结果写入 w 中
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
func main() {
wl := []string{“Hello”, “你好”, “World”, “世界”, “!”, “!”}
srp := strings.NewReplacer(wl…)
s := “Hello World!Hello World!hello world!”
srp.WriteString(os.Stdout, s)
// 你好 世界!你好 世界!hello world!
}