bytes和strings函数比对
bytes | strings | ||
函数签名 | 功能 | 函数签名 | 功能 |
func explode(s []byte, n int) [][]byte | 以每个utf8字符为单位,将前n个字符对应的[]byte型组成新的slice返回 | func explode(s string, n int) []string | 以每个utf8字符为单位,将前n个字符对应的string型组成新的slice返回 |
func countGeneric(s, sep []byte) int | 返回s中有几个sep,若sep为空,则返回sutf8.RuneCount(s) + 1 | func countGeneric(s, substr string) int | 返回s中有几个substr,若substr为空,则返回sutf8.RuneCount(s) + 1 |
func Contains(b, subslice []byte) bool | b中是否含有subslice | func Contains(s, substr string) bool | s中是否含有substr |
func ContainsAny(b []byte, chars string) bool | b中是否含有字符串chars | func ContainsAny(s, chars string) bool | s中是否含有字符串chars中的任意一个unicode字符 |
func ContainsRune(b []byte, r rune) bool | b中是否含有rune r | func ContainsRune(s string, r rune) bool | s中是否含有rune r |
func indexBytePortable(s []byte, c byte) int(并没有导出也没有用于内部) | 返回s中c的位置,若不含有c,则返回-1 | ||
func LastIndex(s, sep []byte) int | 返回s中最后一个sep的位置,若sep为空,返回s的长度,若不含sep,则返回-1 | func LastIndex(s, substr string) int | 返回s中最后一个substr的位置,若substr为空,返回s的长度,若不含substr,则返回-1 |
func LastIndexByte(s []byte, c byte) int | 返回最后一个c的位置,没有则返回-1 | func LastIndexByte(s string, c byte) int | 返回最后一个c的位置,没有则返回-1 |
func IndexRune(s []byte, r rune) int | 返回第一个r的位置,如果r无法解码为utf8又不是\uFFFD,认为没找到返回-1 | func IndexRune(s string, r rune) int | 返回第一个r的位置,如果r无法解码为utf8又不是\uFFFD,认为没找到返回-1 |
func IndexAny(s []byte, chars string) int | 返回chars中任意一个unicode字符在s中第一次出现的位置 | func IndexAny(s, chars string) int | 返回chars中任意一个unicode字符在s中第一次出现的位置 |
func LastIndexAny(s []byte, chars string) int | 返回chars中任意一个unicode字符在s中最后一次出现的位置 | func LastIndexAny(s, chars string) int | 返回chars中任意一个unicode字符在s中最后一次出现的位置 |
func genSplit(s, sep []byte, sepSave, n int) [][]byte | 按sep划分s,返回前n个组成的slice,每个slice中sep的保留位数有sepSave决定,n小于0时,返回所有划分组成的slice | func genSplit(s, sep string, sepSave, n int) []string | 按sep划分s,返回前n个组成的slice,每个slice中sep的保留位数有sepSave决定,n小于0时,返回所有划分组成的slice |
func SplitN(s, sep []byte, n int) [][]byte | 按sep划分s,返回前n个划分的slice组成的slice,每个划分的slice不包含sep,n小于0返回所有划分组成的slice | func SplitN(s, sep string, n int) []string | 按sep划分s,返回前n个划分的string组成的slice,每个划分的string不包含sep,n小于0返回所有划分组成的slice |
func SplitAfterN(s, sep []byte, n int) [][]byte | 按sep划分s,返回前n个划分的slice组成slice,每个划分包含sep | func SplitAfterN(s, sep string, n int) []string | 按sep划分s,返回前n个划分的string组成slice,每个划分包含sep |
func Split(s, sep []byte) [][]byte | 返回所有的由sep划分的slice组成的slice,每个划分不包含sep | func Split(s, sep string) []string | 返回所有的由sep划分的string组成的slice,每个划分不包含sep |
func SplitAfter(s, sep []byte) [][]byte | 返回所有的由sep划分的slice组成的slice,每个划分包含sep | func SplitAfter(s, sep string) []string | 返回所有的由sep划分的string组成的slice,每个划分包含sep |
func Fields(s []byte) [][]byte | 按unicode.IsSpace划分s(所有连续的whitespce当成一个sep),返回所有的划分组成的slice | func Fields(s string) []string | 按unicode.IsSpace划分s(所有连续的whitespce当成一个sep),返回所有的划分组成的slice |
func FieldsFunc(s []byte, f func(rune) bool) [][]byte | 如果s中对应的一个rune满足f,则这个rune就是s的一个分隔符,返回s中所有分隔符划分的子slice的slice | func FieldsFunc(s string, f func(rune) bool) []string | 如果s中对应的一个rune满足f,则这个rune就是s的一个分隔符,返回s中所有分隔符划分的子string的slice |
func Join(s [][]byte, sep []byte) []byte | 将s中的元素用sep拼接起来,返回一个新的slice | func Join(a []string, sep string) string | 将s中的元素用sep拼接起来,返回一个新的string |
func HasPrefix(s, prefix []byte) bool | 判断s是否以prefix开头 | func HasPrefix(s, prefix string) bool | 判断s是否以prefix开头 |
func HasSuffix(s, suffix []byte) bool | 判断s是否以suffix结尾 | func HasSuffix(s, suffix string) bool | 判断s是否以suffix结尾 |
func Map(mapping func(r rune) rune, s []byte) []byte | 将s中对应的每个rune字符作用映射f得到新的字符,再将这些字符转为utf8存储在一个新的slice中返回 | func Map(mapping func(rune) rune, s string) string | 将s中对应的每个rune字符作用映射f得到新的字符,再将这些字符存储在一个新的string中返回 |
func Repeat(b []byte, count int) []byte | 重复b count次,返回新的slice | func Repeat(s string, count int) string | 重复s count次,返回新的string |
func ToUpper(s []byte) []byte | 转为大写 | func ToUpper(s string) string | 转为大写 |
func ToLower(s []byte) []byte | 转为小写 | func ToLower(s string) string | 转为小写 |
func ToTitle(s []byte) []byte | 转为Title | func ToTitle(s string) string | 转为Title |
func ToUpperSpecial(c unicode.SpecialCase, s []byte) []byte | 只将SpecialCase范围里的字符转为大写 | func ToUpperSpecial(c unicode.SpecialCase, s string) string | 只将SpecialCase范围里的字符转为大写 |
func ToLowerSpecial(c unicode.SpecialCase, s []byte) []byte | 只将SpecialCase范围里的字符转为小写 | func ToLowerSpecial(c unicode.SpecialCase, s string) string | 只将SpecialCase范围里的字符转为小写 |
func ToTitleSpecial(c unicode.SpecialCase, s []byte) []byte | 只将SpecialCase范围里的字符转为Title | func ToTitleSpecial(c unicode.SpecialCase, s string) string | 只将SpecialCase范围里的字符转为Title |
func isSeparator(r rune) bool | r是否可以作为一个词(unicode)的分隔符 ascii码,数字,字母,下划线不可以 非ascii码,unicode的数字,字母不可以,剩下其他认为是unicode的space可以 | func isSeparator(r rune) bool | r是否可以作为一个词(unicode)的分隔符 ascii码,数字,字母,下划线不可以 非ascii码,unicode的数字,字母不可以,剩下其他认为是unicode的space可以 |
func Title(s []byte) []byte | 调用Map,s中非词分隔符的字符转换为Title | func Title(s string) string | 调用Map,s中非词分隔符的字符转换为Title |
func TrimLeftFunc(s []byte, f func(r rune) bool) []byte | 以左边起第一个不满足f的rune对应的utf8码开始到s末尾的子slice | func TrimLeftFunc(s string, f func(rune) bool) string | 以左边起第一个不满足f的rune对应的utf8码开始到s末尾的子string |
func TrimRightFunc(s []byte, f func(r rune) bool) []byte | 以s头开始到从右边起第一个不满足f的rune对应的utf8码为终点的子slice | func TrimRightFunc(s string, f func(rune) bool) string | 以s头开始到从右边起第一个不满足f的rune对应的utf8码为终点的子string |
func TrimFunc(s []byte, f func(r rune) bool) []byte | 去掉左边和去掉右边的结合体 | func TrimFunc(s string, f func(rune) bool) string | 去掉左边和去掉右边的结合体 |
func TrimPrefix(s, prefix []byte) []byte | 去掉prefix后的子slice | func TrimPrefix(s, prefix string) string | 去掉prefix后的子string |
func TrimSuffix(s, suffix []byte) []byte | 去掉suffix后的子slice | func TrimSuffix(s, suffix string) string | 去掉suffix后的子string |
func IndexFunc(s []byte, f func(r rune) bool) int | 返回s中第一个满足f的rune字符对应的utf8码的起始位置 | func IndexFunc(s string, f func(rune) bool) int | 返回s中第一个满足f的rune字符对应的utf8码的起始位置 |
func LastIndexFunc(s []byte, f func(r rune) bool) int | 返回s中最后一个满足f的rune字符对应的utf8码的起始位置 | func LastIndexFunc(s string, f func(rune) bool) int | 返回s中最后一个满足f的rune字符对应的utf8码的起始位置 |
func indexFunc(s []byte, f func(r rune) bool, truth bool) | 返回s中第一个在f作用下得到truth的rune字符对应的utf8码的起始位置 | func indexFunc(s string, f func(rune) bool, truth bool) int | 返回s中第一个在f作用下得到truth的rune字符对应的utf8码的起始位置 |
func lastIndexFunc(s []byte, f func(r rune) bool, truth bool) int | 返回s中最后一个在f作用下得到truth的rune字符对应的utf8码的起始位置 | func lastIndexFunc(s string, f func(rune) bool, truth bool) int | 返回s中最后一个在f作用下得到truth的rune字符对应的utf8码的起始位置 |
func makeASCIISet(chars string) (as asciiSet, ok bool) | 返回s中碰到非ascii码之前所有ascii码的集合,以及s中是否都是ascii码 可以把asciiSet看成是一个32字节长度的值,其中低16字节共计128位表达128个ascii码[0,127],高16字节用来比对非ascii码 具体存储: asciiSet是一个含有8个元素的数组,每个元素有32位,共计256位, 其中元素的位置保存了该字符(uint8)对应的高3位(c>>5)的信息, 元素的内容保存了每个字符低5位(1 << uint(c&31))的信息,5位最大是31(11111), 刚好uint32的每一位可以代表在相同高3位的情况下,所有字符的低5位情况, 这样就可以用数组的前4个元素完整表达128个ascii了 | func makeASCIISet(chars string) (as asciiSet, ok bool) | 返回s中碰到非ascii码之前所有ascii码的集合,以及s中是否都是ascii码 可以把asciiSet看成是一个32字节长度的值,其中低16字节共计128位表达128个ascii码[0,127],高16字节用来比对非ascii码 具体存储: asciiSet是一个含有8个元素的数组,每个元素有32位,共计256位, 其中元素的位置保存了该字符(uint8)对应的高3位(c>>5)的信息, 元素的内容保存了每个字符低5位(1 << uint(c&31))的信息,5位最大是31(11111), 刚好uint32的每一位可以代表在相同高3位的情况下,所有字符的低5位情况, 这样就可以用数组的前4个元素完整表达128个ascii了 |
func (as *asciiSet) contains(c byte) bool | c是否在as中 | func (as *asciiSet) contains(c byte) bool | c是否在as中 |
func makeCutsetFunc(cutset string) func(r rune) bool | 返回一个判断r是否在cutset字符串中的函数 若为单字节字符串,则返回一个直接比较r是否和cutset相同的函数 根据cutset创建一个ascii码的集合, 如果全是ascii,则返回一个用来判断r是否在上述集合中的函数 如果含有非ascii,则返回一个逐一循环cutset中rune字符,判断r是否其中之一的函数 | func makeCutsetFunc(cutset string) func(rune) bool | 返回一个判断r是否在cutset字符串中的函数 若为单字节字符串,则返回一个直接比较r是否和cutset相同的函数 根据cutset创建一个ascii码的集合, 如果全是ascii,则返回一个用来判断r是否在上述集合中的函数 如果含有非ascii,则返回一个逐一循环cutset中rune字符,判断r是否其中之一的函数 |
func Trim(s []byte, cutset string) []byte | 将s左右两端连续属于cutset的rune字符去除,保留中间的子slice | func Trim(s string, cutset string) string | 将s左右两端连续属于cutset的rune字符去除,保留中间的子string |
func TrimLeft(s []byte, cutset string) []byte | 将s左边连续属于cutset的rune字符去除,返回剩下的子slice | func TrimLeft(s string, cutset string) string | 将s左边连续属于cutset的rune字符去除,返回剩下的子string |
func TrimRight(s []byte, cutset string) []byte | 将s右边连续属于cutset的rune字符去除,返回剩下的子slice | func TrimRight(s string, cutset string) string | 将s右边连续属于cutset的rune字符去除,返回剩下的子string |
func TrimSpace(s []byte) []byte | 去除s左右两端的whitespce,保留剩下的子slice | func TrimSpace(s string) string | 去除s左右两端的whitespce,保留剩下的子string |
func Runes(s []byte) []rune | 返回s对应的rune类型的slice | ||
func Replace(s, old, new []byte, n int) []byte | 将s中前n个old替换成new,返回一个新的slice,n为负数或者n>old个数时,替换所有old | func Replace(s, old, new string, n int) string | 将s中前n个old替换成new,返回一个新的string,n为负数或者n>old个数时,替换所有old |
func EqualFold(s, t []byte) bool | 判断s和t在不区分大小写(包括unicode case)的情况下是否相等 | func EqualFold(s, t string) bool | 判断s和t在不区分大小写(包括unicode case)的情况下是否相等 |
func indexRabinKarp(s, sep []byte) int | 返回第一个sep在s中的位置 Rabin-Karp字符串匹配算法和前面介绍的《朴素字符串匹配算法》类似,也是对应每一个字符进行比较,不同的是Rabin-Karp采用了把字符进行预处理,也就是对每个字符进行对应进制数并取模运算,类似于通过某种函数计算其函数值,比较的是每个字符的函数值。预处理时间O(m),匹配时间是O((n-m+1)m)。 Rabin-Karp算法的思想: 假设待匹配字符串的长度为M,目标字符串的长度为N(N>M); 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的hash值; 比较前面计算的两个hash值,比较次数N-M+1: 若hash值不相等,则继续计算目标字符串的下一个长度为M的字符子串的hash值 若hash值相同,则需要使用朴素算法再次判断是否为相同的字串; | func indexRabinKarp(s, substr string) int | 返回第一个sep在s中的位置 Rabin-Karp字符串匹配算法和前面介绍的《朴素字符串匹配算法》类似,也是对应每一个字符进行比较,不同的是Rabin-Karp采用了把字符进行预处理,也就是对每个字符进行对应进制数并取模运算,类似于通过某种函数计算其函数值,比较的是每个字符的函数值。预处理时间O(m),匹配时间是O((n-m+1)m)。 Rabin-Karp算法的思想: 假设待匹配字符串的长度为M,目标字符串的长度为N(N>M); 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的hash值; 比较前面计算的两个hash值,比较次数N-M+1: 若hash值不相等,则继续计算目标字符串的下一个长度为M的字符子串的hash值 若hash值相同,则需要使用朴素算法再次判断是否为相同的字串; |
func hashStr(sep []byte) (uint32, uint32) | 计算sep的hash,用于Rabin-Karp算法 | func hashStr(sep string) (uint32, uint32) | 计算sep的hash,用于Rabin-Karp算法 |
func hashStrRev(sep string) (uint32, uint32) | 计算reverse(sep)的hash,用于Rabin-Karp算法 |