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  }