strings: improve readability of IndexAny and LastIndexAny functions.

This change removes the check of len(chars) > 0 inside the Index and
IndexAny functions which was redundant.

Change-Id: Iffbc0f2b3332c6e31c7514b5f644b6fe7bdcfe0d
Reviewed-on: https://go-review.googlesource.com/65910
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
Gabriel Aszalos 2017-09-25 14:54:37 +02:00 committed by Ian Lance Taylor
parent 5db7572ddf
commit c82ee79247

View file

@ -166,23 +166,21 @@ func IndexRune(s string, r rune) int {
// IndexAny returns the index of the first instance of any Unicode code point // IndexAny returns the index of the first instance of any Unicode code point
// from chars in s, or -1 if no Unicode code point from chars is present in s. // from chars in s, or -1 if no Unicode code point from chars is present in s.
func IndexAny(s, chars string) int { func IndexAny(s, chars string) int {
if len(chars) > 0 { if len(s) > 8 {
if len(s) > 8 { if as, isASCII := makeASCIISet(chars); isASCII {
if as, isASCII := makeASCIISet(chars); isASCII { for i := 0; i < len(s); i++ {
for i := 0; i < len(s); i++ { if as.contains(s[i]) {
if as.contains(s[i]) {
return i
}
}
return -1
}
}
for i, c := range s {
for _, m := range chars {
if c == m {
return i return i
} }
} }
return -1
}
}
for i, c := range s {
for _, m := range chars {
if c == m {
return i
}
} }
} }
return -1 return -1
@ -192,25 +190,23 @@ func IndexAny(s, chars string) int {
// point from chars in s, or -1 if no Unicode code point from chars is // point from chars in s, or -1 if no Unicode code point from chars is
// present in s. // present in s.
func LastIndexAny(s, chars string) int { func LastIndexAny(s, chars string) int {
if len(chars) > 0 { if len(s) > 8 {
if len(s) > 8 { if as, isASCII := makeASCIISet(chars); isASCII {
if as, isASCII := makeASCIISet(chars); isASCII { for i := len(s) - 1; i >= 0; i-- {
for i := len(s) - 1; i >= 0; i-- { if as.contains(s[i]) {
if as.contains(s[i]) {
return i
}
}
return -1
}
}
for i := len(s); i > 0; {
r, size := utf8.DecodeLastRuneInString(s[:i])
i -= size
for _, c := range chars {
if r == c {
return i return i
} }
} }
return -1
}
}
for i := len(s); i > 0; {
r, size := utf8.DecodeLastRuneInString(s[:i])
i -= size
for _, c := range chars {
if r == c {
return i
}
} }
} }
return -1 return -1