mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
strings: document Split{,N,After,AfterN} edge cases
Apparently people get confused by the fact that
Split("", ",")
returns []{""} instead of []{}.
This is actually just a consequence of the fact that if the separator
sep (2nd argument) is not found the string s (1st argument), then the
Split* functions return a length 1 slice with the string s in it.
Document the general case: if sep is not in s, what you get is a len 1
slice with s in it; unless both s and sep are "", in that case you get
an empty slice of length 0.
Fixes #19726
Change-Id: I64c8220b91acd1e5aa1cc1829199e0cd8c47c404
Reviewed-on: https://go-review.googlesource.com/44950
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
This commit is contained in:
parent
2d86f49428
commit
3a27f28e9b
1 changed files with 22 additions and 4 deletions
|
|
@ -257,33 +257,51 @@ func genSplit(s, sep string, sepSave, n int) []string {
|
|||
|
||||
// SplitN slices s into substrings separated by sep and returns a slice of
|
||||
// the substrings between those separators.
|
||||
// If sep is empty, SplitN splits after each UTF-8 sequence.
|
||||
//
|
||||
// The count determines the number of substrings to return:
|
||||
// n > 0: at most n substrings; the last substring will be the unsplit remainder.
|
||||
// n == 0: the result is nil (zero substrings)
|
||||
// n < 0: all substrings
|
||||
//
|
||||
// Edge cases for s and sep (for example, empty strings) are handled
|
||||
// as described in the documentation for Split.
|
||||
func SplitN(s, sep string, n int) []string { return genSplit(s, sep, 0, n) }
|
||||
|
||||
// SplitAfterN slices s into substrings after each instance of sep and
|
||||
// returns a slice of those substrings.
|
||||
// If sep is empty, SplitAfterN splits after each UTF-8 sequence.
|
||||
//
|
||||
// The count determines the number of substrings to return:
|
||||
// n > 0: at most n substrings; the last substring will be the unsplit remainder.
|
||||
// n == 0: the result is nil (zero substrings)
|
||||
// n < 0: all substrings
|
||||
//
|
||||
// Edge cases for s and sep (for example, empty strings) are handled
|
||||
// as described in the documentation for SplitAfter.
|
||||
func SplitAfterN(s, sep string, n int) []string {
|
||||
return genSplit(s, sep, len(sep), n)
|
||||
}
|
||||
|
||||
// Split slices s into all substrings separated by sep and returns a slice of
|
||||
// the substrings between those separators.
|
||||
// If sep is empty, Split splits after each UTF-8 sequence.
|
||||
//
|
||||
// If s does not contain sep and sep is not empty, Split returns a
|
||||
// slice of length 1 whose only element is s.
|
||||
//
|
||||
// If sep is empty, Split splits after each UTF-8 sequence. If both s
|
||||
// and sep are empty, Split returns an empty slice.
|
||||
//
|
||||
// It is equivalent to SplitN with a count of -1.
|
||||
func Split(s, sep string) []string { return genSplit(s, sep, 0, -1) }
|
||||
|
||||
// SplitAfter slices s into all substrings after each instance of sep and
|
||||
// returns a slice of those substrings.
|
||||
// If sep is empty, SplitAfter splits after each UTF-8 sequence.
|
||||
//
|
||||
// If s does not contain sep and sep is not empty, SplitAfter returns
|
||||
// a slice of length 1 whose only element is s.
|
||||
//
|
||||
// If sep is empty, SplitAfter splits after each UTF-8 sequence. If
|
||||
// both s and sep are empty, SplitAfter returns an empty slice.
|
||||
//
|
||||
// It is equivalent to SplitAfterN with a count of -1.
|
||||
func SplitAfter(s, sep string) []string {
|
||||
return genSplit(s, sep, len(sep), -1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue