Bir dizenin Go'da başka bir dizenin alt dizesi olup olmadığını nasıl kontrol ederim? Örneğin, kontrol etmek istiyorum someString.contains("something").
Bir dizenin Go'da başka bir dizenin alt dizesi olup olmadığını nasıl kontrol ederim? Örneğin, kontrol etmek istiyorum someString.contains("something").
Yanıtlar:
İşlevini kullanın Containsgelen dizeleri paketin.
import (
"strings"
)
strings.Contains("something", "some") // true
Karşılaştırmak için daha fazla seçenek var:
import (
"fmt"
"regexp"
"strings"
)
const (
str = "something"
substr = "some"
)
// 1. Contains
res := strings.Contains(str, substr)
fmt.Println(res) // true
// 2. Index: check the index of the first instance of substr in str, or -1 if substr is not present
i := strings.Index(str, substr)
fmt.Println(i) // 0
// 3. Split by substr and check len of the slice, or length is 1 if substr is not present
ss := strings.Split(str, substr)
fmt.Println(len(ss)) // 2
// 4. Check number of non-overlapping instances of substr in str
c := strings.Count(str, substr)
fmt.Println(c) // 1
// 5. RegExp
matched, _ := regexp.MatchString(substr, str)
fmt.Println(matched) // true
// 6. Compiled RegExp
re = regexp.MustCompile(substr)
res = re.MatchString(str)
fmt.Println(res) // true
Kıyaslamalar:
Containsdahili olarak arama yapar Index, bu yüzden hız neredeyse aynıdır (btw Go 1.11.5, Go 1.14.3'e göre biraz daha büyük bir fark gösterdi).
BenchmarkStringsContains-4 100000000 10.5 ns/op 0 B/op 0 allocs/op
BenchmarkStringsIndex-4 117090943 10.1 ns/op 0 B/op 0 allocs/op
BenchmarkStringsSplit-4 6958126 152 ns/op 32 B/op 1 allocs/op
BenchmarkStringsCount-4 42397729 29.1 ns/op 0 B/op 0 allocs/op
BenchmarkStringsRegExp-4 461696 2467 ns/op 1326 B/op 16 allocs/op
BenchmarkStringsRegExpCompiled-4 7109509 168 ns/op 0 B/op 0 allocs/op