summaryrefslogtreecommitdiff
path: root/src/pkg/strings/strings.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/strings/strings.go')
-rw-r--r--src/pkg/strings/strings.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/pkg/strings/strings.go b/src/pkg/strings/strings.go
index 0a9f64ca0..90417f811 100644
--- a/src/pkg/strings/strings.go
+++ b/src/pkg/strings/strings.go
@@ -172,12 +172,19 @@ func SplitAfter(s, sep string, n int) []string {
// Fields splits the string s around each instance of one or more consecutive white space
// characters, returning an array of substrings of s or an empty list if s contains only white space.
func Fields(s string) []string {
+ return FieldsFunc(s, unicode.IsSpace)
+}
+
+// FieldsFunc splits the string s at each run of Unicode code points c satifying f(c)
+// and returns an array of slices of s. If no code points in s satisfy f(c), an empty slice
+// is returned.
+func FieldsFunc(s string, f func(int) bool) []string {
// First count the fields.
n := 0
inField := false
for _, rune := range s {
wasInField := inField
- inField = !unicode.IsSpace(rune)
+ inField = !f(rune)
if inField && !wasInField {
n++
}
@@ -188,7 +195,7 @@ func Fields(s string) []string {
na := 0
fieldStart := -1 // Set to -1 when looking for start of field.
for i, rune := range s {
- if unicode.IsSpace(rune) {
+ if f(rune) {
if fieldStart >= 0 {
a[na] = s[fieldStart:i]
na++