Go取得一個字串中特定字串(含)後的子字串的方式如下。
例如下面取得字串foo/bar/baz
中bar/
(含)之後的子字串。利用strings.Index
找出特定字串首字的索引位置後,再從原字串該索引擷取到最後的子字串。
package main
import (
"fmt"
"strings"
)
func main() {
str := "foo/bar/baz"
subStr := str[strings.Index(str, "bar/"):]
fmt.Println(subStr) // bar/baz
}
若子字串要不含特定字串,則strings.Index
找到的索引再加上特定字串的長度即可。
package main
import (
"fmt"
"strings"
)
func main() {
str := "foo/bar/baz"
subStr := str[strings.Index(str, "bar/")+len("bar/"):]
fmt.Println(subStr) // baz
}
下面的sub1
和sub2
可擷取字串中特定字串後的子字串(未詳盡測試)。
package main
import (
"fmt"
"strings"
)
func main() {
s := "foo/bar/baz/bar/qux"
fmt.Println(sub1(s, "/bar", 2, true)) // /bar/qux
fmt.Println(sub2(s, "/bar", 1, false)) // /baz/bar/qux
}
func sub1(s, subStr string, n int, isContain bool) string {
if n <= 0 {
return ""
}
for i := 1; i <= n; i++ {
sliceIndex := strings.Index(s, subStr) + len(subStr)
if sliceIndex > len(s) {
return ""
}
s = s[sliceIndex:]
}
if isContain {
s = subStr + s
}
return s
}
func sub2(s, subStr string, n int, isContain bool) string {
ss := strings.SplitN(s, subStr, n+1)
if len(ss) <= n {
return ""
}
s = ss[n]
if isContain {
s = subStr + s
}
return s
}
沒有留言:
張貼留言