1. 2.2 bytes byte slice 便利操作
该包定义了 操作 byte slice 的便利操作
因为字符串可以表示为 []byte 因此 bytes 包定义的函数 方法等和 strings 包很类似 所以讲解时会和 strings 包类似甚至可以直接参考
说明 为了方便 会称呼 []byte 为 字节数组
1.1. 2.2.1 是否存在某个子slice
func Contains(b, subslice []byte) bool // 子slice subslice 在 b 中 返回 true
该函数的内部调用了 bytes.Index 函数
func Contains(b, subslice []byte) bool {
return Index(b, subslice) != -1
}
对比 strings.Contains 发现 一个判断 >=0 一个判断 != -1 可见库不是一个人写的 没有做到一致性
1.2. 2.2.2 []byte 出现次数
func Count(s, sep []byte) int // slice sep 在 s 中出现的次数(无重叠)
和 strings 实现不同 此包中的 Count 核心代码如下
count := 0
c := sep[0]
i := 0
t := s[:len(s)-n+1]
for i < len(t) {
// 判断 sep 第一个字节是否在 t[i:] 中
// 如果在 则比较之后相应的字节
if t[i] != c {
o := IndexByte(t[i:], c)
if o < 0 {
break
}
i += o
}
// 执行到这里表示 sep[0] == t[i]
if n == 1 || Equal(s[i:i+n], sep) {
count++
i += n
continue
}
i++
}
1.3. 2.2.3 - 7 参见 strings 包对应的部分
该包定义了 操作 byte slice 的便利操作
因为字符串可以表示为 []byte 因此 bytes 包定义的函数 方法等和 strings 包很类似 所以讲解时会和 strings 包类似甚至可以直接参考
说明 为了方便 会称呼 []byte 为 字节数组
1.1. 2.2.1 是否存在某个子slice
func Contains(b, subslice []byte) bool // 子slice subslice 在 b 中 返回 true
该函数的内部调用了 bytes.Index 函数
func Contains(b, subslice []byte) bool {
return Index(b, subslice) != -1
}
对比 strings.Contains 发现 一个判断 >=0 一个判断 != -1 可见库不是一个人写的 没有做到一致性
1.2. 2.2.2 []byte 出现次数
func Count(s, sep []byte) int // slice sep 在 s 中出现的次数(无重叠)
和 strings 实现不同 此包中的 Count 核心代码如下
count := 0
c := sep[0]
i := 0
t := s[:len(s)-n+1]
for i < len(t) {
// 判断 sep 第一个字节是否在 t[i:] 中
// 如果在 则比较之后相应的字节
if t[i] != c {
o := IndexByte(t[i:], c)
if o < 0 {
break
}
i += o
}
// 执行到这里表示 sep[0] == t[i]
if n == 1 || Equal(s[i:i+n], sep) {
count++
i += n
continue
}
i++
}
1.3. 2.2.3 - 7 参见 strings 包对应的部分
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题