package strutilimport ()// BeforeFirst get substring before first sep.func (, string) string {if := strings.Index(, ); >= 0 {return [:] }return}// AfterFirst get substring after first sep.func (, string) string {if := strings.Index(, ); >= 0 {return [+len():] }return""}// BeforeLast get substring before last sep.func (, string) string {if := strings.LastIndex(, ); >= 0 {return [:] }return}// AfterLast get substring after last sep.func (, string) string {if := strings.LastIndex(, ); >= 0 {return [+len():] }return""}/************************************************************* * String split operation *************************************************************/// Cut alias of the strings.Cutfunc (, string) ( string, string, bool) {if := strings.Index(, ); >= 0 {return [:], [+len():], true }return , "", false}// QuietCut always returns two substring.func (, string) ( string, string) { , , _ = Cut(, )return}// MustCut always returns two substring.func (, string) ( string, string) {varbool , , = Cut(, )if ! {panic("cannot split input string to two nodes") }return}// TrimCut always returns two substring and trim space for items.func (, string) (string, string) { , , := Cut(, )returnstrings.TrimSpace(), strings.TrimSpace()}// SplitKV split string to key and value.func (, string) (string, string) { returnTrimCut(, ) }// SplitValid string to slice. will trim each item and filter empty string node.func (, string) ( []string) { returnSplit(, ) }// Split string to slice. will trim each item and filter empty string node.func (, string) ( []string) {if = strings.TrimSpace(); == "" {return }for , := rangestrings.Split(, ) {if = strings.TrimSpace(); != "" { = append(, ) } }return}// SplitNValid string to slice. will filter empty string node.func (, string, int) ( []string) { returnSplitN(, , ) }// SplitN string to slice. will filter empty string node.func (, string, int) ( []string) {if = strings.TrimSpace(); == "" {return } := strings.Split(, )for , := range {if = strings.TrimSpace(); != "" {iflen() == -1 { = append(, strings.TrimSpace(strings.Join([:], )))break } = append(, ) } }return}// SplitTrimmed split string to slice.// will trim space for each node, but not filter emptyfunc (, string) ( []string) {if = strings.TrimSpace(); == "" {return }for , := rangestrings.Split(, ) { = append(, strings.TrimSpace()) }return}// SplitNTrimmed split string to slice.// will trim space for each node, but not filter emptyfunc (, string, int) ( []string) {if = strings.TrimSpace(); == "" {return }for , := rangestrings.SplitN(, , ) { = append(, strings.TrimSpace()) }return}// 根据空白字符(空格,TAB,换行等)分隔字符串var whitespaceRegexp = regexp.MustCompile(`\s+`)// SplitByWhitespace Separate strings by whitespace characters (space, TAB, newline, etc.)func ( string) []string {returnwhitespaceRegexp.Split(, -1)}// Substr for a string. NOTE: strLn := len(runes)// if length <= 0, return pos to end.func ( string, , int) string { := []rune() := len()// pos is too largeif >= {return"" } := + if == 0 || > { = } elseif < 0 { = + }returnstring([:])}// SplitInlineComment for an inline text string. default is strict mode.func ( string, ...bool) (string, string) {// strict check: must with a spaceiflen() == 0 || [0] {if := strings.Index(, " #"); > -1 {returnstrings.TrimRight([0:], " "), [+1:] }if := strings.Index(, " //"); > -1 {returnstrings.TrimRight([0:], " "), [+1:] }return , "" }if := strings.IndexByte(, '#'); > -1 {returnstrings.TrimRight([0:], " "), [:] }if := strings.Index(, "//"); > -1 {returnstrings.TrimRight([0:], " "), [:] }return , ""}// FirstLine from command outputfunc ( string) string {if := strings.IndexByte(, '\n'); >= 0 {return [0:] }return}
The pages are generated with Goldsv0.8.4. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.