You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
806 B
48 lines
806 B
7 years ago
|
// +build js
|
||
|
|
||
|
package strings
|
||
|
|
||
|
import (
|
||
|
"unicode/utf8"
|
||
|
|
||
|
"github.com/gopherjs/gopherjs/js"
|
||
|
)
|
||
|
|
||
|
func IndexByte(s string, c byte) int {
|
||
|
return js.InternalObject(s).Call("indexOf", js.Global.Get("String").Call("fromCharCode", c)).Int()
|
||
|
}
|
||
|
|
||
|
func Index(s, sep string) int {
|
||
|
return js.InternalObject(s).Call("indexOf", js.InternalObject(sep)).Int()
|
||
|
}
|
||
|
|
||
|
func LastIndex(s, sep string) int {
|
||
|
return js.InternalObject(s).Call("lastIndexOf", js.InternalObject(sep)).Int()
|
||
|
}
|
||
|
|
||
|
func Count(s, sep string) int {
|
||
|
n := 0
|
||
|
// special cases
|
||
|
switch {
|
||
|
case len(sep) == 0:
|
||
|
return utf8.RuneCountInString(s) + 1
|
||
|
case len(sep) > len(s):
|
||
|
return 0
|
||
|
case len(sep) == len(s):
|
||
|
if sep == s {
|
||
|
return 1
|
||
|
}
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
for {
|
||
|
pos := Index(s, sep)
|
||
|
if pos == -1 {
|
||
|
break
|
||
|
}
|
||
|
n++
|
||
|
s = s[pos+len(sep):]
|
||
|
}
|
||
|
return n
|
||
|
}
|