main.go 1023 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package yu_bytes
  2. import (
  3. "bytes"
  4. yu_fast "gogs.qqck.cn/s/tools/fast"
  5. )
  6. // Lines
  7. //
  8. // @Description: 寻找数据
  9. // @param s 被寻找的数据
  10. // @param sep 欲寻找的数据
  11. // @return int 找到次数,相邻的"sep"或"s"=="sep"则不计数,不以"sep"结尾则"i+1"
  12. func Lines(s, sep []byte) int64 {
  13. j_s_len, j_sep_len := len(s), len(sep)
  14. if j_sep_len == j_s_len {
  15. if j_sep_len == 0 {
  16. return 0
  17. }
  18. if yu_fast.B2S(s) == yu_fast.B2S(sep) {
  19. return 0
  20. }
  21. return 1
  22. }
  23. if j_sep_len > j_s_len {
  24. return 1
  25. }
  26. j_count, j_i := int64(0), 0
  27. if j_sep_len == 1 {
  28. j_i_old := 0
  29. for j_i < j_s_len {
  30. if s[j_i] == sep[0] {
  31. if j_i != j_i_old {
  32. j_count++
  33. }
  34. j_i++
  35. j_i_old = j_i
  36. } else {
  37. j_i++
  38. }
  39. }
  40. if j_i != j_i_old {
  41. j_count++
  42. }
  43. return j_count
  44. }
  45. for j_i+j_sep_len < j_s_len {
  46. j_index := bytes.Index(s[j_i:], sep)
  47. if j_index > -1 {
  48. j_i += j_index + j_sep_len
  49. if j_index > 0 {
  50. j_count++
  51. }
  52. } else {
  53. j_count++
  54. break
  55. }
  56. }
  57. return j_count
  58. }