123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package yu_bytes
- import (
- "bytes"
- yu_fast "gogs.qqck.cn/s/tools/fast"
- )
- // Lines
- //
- // @Description: 寻找数据
- // @param s 被寻找的数据
- // @param sep 欲寻找的数据
- // @return int 找到次数,相邻的"sep"或"s"=="sep"则不计数,不以"sep"结尾则"i+1"
- func Lines(s, sep []byte) int64 {
- j_s_len, j_sep_len := len(s), len(sep)
- if j_sep_len == j_s_len {
- if j_sep_len == 0 {
- return 0
- }
- if yu_fast.B2S(s) == yu_fast.B2S(sep) {
- return 0
- }
- return 1
- }
- if j_sep_len > j_s_len {
- return 1
- }
- j_count, j_i := int64(0), 0
- if j_sep_len == 1 {
- j_i_old := 0
- for j_i < j_s_len {
- if s[j_i] == sep[0] {
- if j_i != j_i_old {
- j_count++
- }
- j_i++
- j_i_old = j_i
- } else {
- j_i++
- }
- }
- if j_i != j_i_old {
- j_count++
- }
- return j_count
- }
- for j_i+j_sep_len < j_s_len {
- j_index := bytes.Index(s[j_i:], sep)
- if j_index > -1 {
- j_i += j_index + j_sep_len
- if j_index > 0 {
- j_count++
- }
- } else {
- j_count++
- break
- }
- }
- return j_count
- }
|