proposal: strings: add Cut (original) (raw)

In many projects I've seen code like this:

idx = strings.Index(username, "@") if idx != -1 { name = username[:idx] } else { name = username }

idx = strings.LastIndex(address, "@") if idx != -1 { host = address[idx+1:] } else { host = address }

I think this operation—getting a prefix or suffix based on a substring—is common enough to think about adding helpers for them. So I propose to add functions PrefixUntil andSuffixAfter (names up for debate) to package strings. Something like:

// PrefixUntil returns the prefix of the string s until the first // occurrence of the substring substr, excluding the substring itself. // It returns s if substr was not found. func PrefixUntil(s, substr string) (prefix string) { var idx = Index(s, substr) if idx == -1 { return s }

return s[:idx]

}

// SuffixAfter returns the suffix of the string s after the last // occurrence of the substring substr, excluding the substring itself. // It returns s if substr was not found. func SuffixAfter(s, substr string) (suffix string) { var idx = LastIndex(s, substr) if idx == -1 { return s }

return s[idx+len(substr):]

}

So that the code could be rewritten as:

name = strings.PrefixUntil(username, "@")

host = strings.SuffixAfter(address, "@")