mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
strings: Add ContainsAny and ContainsRune to correspond to IndexAny etc.
R=golang-dev, r CC=golang-dev https://golang.org/cl/5430046
This commit is contained in:
parent
da62104169
commit
0f0c25dccc
2 changed files with 63 additions and 3 deletions
|
|
@ -64,7 +64,17 @@ func Count(s, sep string) int {
|
||||||
|
|
||||||
// Contains returns true if substr is within s.
|
// Contains returns true if substr is within s.
|
||||||
func Contains(s, substr string) bool {
|
func Contains(s, substr string) bool {
|
||||||
return Index(s, substr) != -1
|
return Index(s, substr) >= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainsAny returns true if any Unicode code points in chars are within s.
|
||||||
|
func ContainsAny(s, chars string) bool {
|
||||||
|
return IndexAny(s, chars) >= 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainsRune returns true if the Unicode code point r is within s.
|
||||||
|
func ContainsRune(s string, r rune) bool {
|
||||||
|
return IndexRune(s, r) >= 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s.
|
// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s.
|
||||||
|
|
@ -269,7 +279,7 @@ func FieldsFunc(s string, f func(rune) bool) []string {
|
||||||
fieldStart = i
|
fieldStart = i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if fieldStart != -1 { // Last field might end at EOF.
|
if fieldStart >= 0 { // Last field might end at EOF.
|
||||||
a[na] = s[fieldStart:]
|
a[na] = s[fieldStart:]
|
||||||
}
|
}
|
||||||
return a
|
return a
|
||||||
|
|
@ -512,7 +522,7 @@ func lastIndexFunc(s string, f func(rune) bool, truth bool) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeCutsetFunc(cutset string) func(rune) bool {
|
func makeCutsetFunc(cutset string) func(rune) bool {
|
||||||
return func(r rune) bool { return IndexRune(cutset, r) != -1 }
|
return func(r rune) bool { return IndexRune(cutset, r) >= 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trim returns a slice of the string s with all leading and
|
// Trim returns a slice of the string s with all leading and
|
||||||
|
|
|
||||||
|
|
@ -908,6 +908,56 @@ func TestContains(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ContainsAnyTests = []struct {
|
||||||
|
str, substr string
|
||||||
|
expected bool
|
||||||
|
}{
|
||||||
|
{"", "", false},
|
||||||
|
{"", "a", false},
|
||||||
|
{"", "abc", false},
|
||||||
|
{"a", "", false},
|
||||||
|
{"a", "a", true},
|
||||||
|
{"aaa", "a", true},
|
||||||
|
{"abc", "xyz", false},
|
||||||
|
{"abc", "xcz", true},
|
||||||
|
{"a☺b☻c☹d", "uvw☻xyz", true},
|
||||||
|
{"aRegExp*", ".(|)*+?^$[]", true},
|
||||||
|
{dots + dots + dots, " ", false},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestContainsAny(t *testing.T) {
|
||||||
|
for _, ct := range ContainsAnyTests {
|
||||||
|
if ContainsAny(ct.str, ct.substr) != ct.expected {
|
||||||
|
t.Errorf("ContainsAny(%s, %s) = %v, want %v",
|
||||||
|
ct.str, ct.substr, !ct.expected, ct.expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ContainsRuneTests = []struct {
|
||||||
|
str string
|
||||||
|
r rune
|
||||||
|
expected bool
|
||||||
|
}{
|
||||||
|
{"", 'a', false},
|
||||||
|
{"a", 'a', true},
|
||||||
|
{"aaa", 'a', true},
|
||||||
|
{"abc", 'y', false},
|
||||||
|
{"abc", 'c', true},
|
||||||
|
{"a☺b☻c☹d", 'x', false},
|
||||||
|
{"a☺b☻c☹d", '☻', true},
|
||||||
|
{"aRegExp*", '*', true},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestContainsRune(t *testing.T) {
|
||||||
|
for _, ct := range ContainsRuneTests {
|
||||||
|
if ContainsRune(ct.str, ct.r) != ct.expected {
|
||||||
|
t.Errorf("ContainsRune(%s, %s) = %v, want %v",
|
||||||
|
ct.str, ct.r, !ct.expected, ct.expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var EqualFoldTests = []struct {
|
var EqualFoldTests = []struct {
|
||||||
s, t string
|
s, t string
|
||||||
out bool
|
out bool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue