github.com/DQNEO/babygo@v0.0.3/lib/strings/strings.go (about) 1 package strings 2 3 // "foo/bar", "/" => []string{"foo", "bar"} 4 func Split(s string, ssep string) []string { 5 if len(ssep) > 1 { 6 panic("no supported") 7 } 8 sepchar := ssep[0] 9 var buf []byte 10 var r []string 11 for _, b := range []byte(s) { 12 if b == sepchar { 13 r = append(r, string(buf)) 14 buf = nil 15 } else { 16 buf = append(buf, b) 17 } 18 } 19 r = append(r, string(buf)) 20 21 return r 22 } 23 24 func HasPrefix(s string, prefix string) bool { 25 for i, bp := range []byte(prefix) { 26 if bp != s[i] { 27 return false 28 } 29 } 30 return true 31 } 32 33 func HasSuffix(s string, suffix string) bool { 34 if len(s) >= len(suffix) { 35 var low int = len(s) - len(suffix) 36 var lensb int = len(s) 37 var suf []byte 38 sb := []byte(s) 39 suf = sb[low:lensb] // lensb is required 40 return eq2(suf, []byte(suffix)) 41 } 42 return false 43 } 44 45 func eq2(a []byte, b []byte) bool { 46 if len(a) != len(b) { 47 return false 48 } 49 50 for i := 0; i < len(a); i++ { 51 if a[i] != b[i] { 52 return false 53 } 54 } 55 return true 56 } 57 58 // Contains reports whether substr is within s. 59 func Contains(s string, substr string) bool { 60 return Index(s, substr) >= 0 61 } 62 63 func Index(s string, substr string) int { 64 var in bool 65 var subIndex int 66 var r int = -1 // not found 67 for i, b := range []byte(s) { 68 if !in && b == substr[0] { 69 in = true 70 r = i 71 subIndex = 0 72 } 73 74 if in { 75 if b == substr[subIndex] { 76 if subIndex == len(substr)-1 { 77 return r 78 } 79 } else { 80 in = false 81 r = -1 82 subIndex = 0 83 } 84 } 85 } 86 87 return -1 88 } 89 90 // search index of the specified char from backward 91 func LastIndexByte(s string, c uint8) int { 92 for i := len(s) - 1; i >= 0; i-- { 93 if s[i] == c { 94 return i 95 } 96 } 97 // not found 98 return -1 99 }