Làm cách nào để kiểm tra xem một chuỗi có phải là chuỗi con của một chuỗi khác trong Go hay không? Ví dụ, tôi muốn kiểm tra someString.contains("something").
Làm cách nào để kiểm tra xem một chuỗi có phải là chuỗi con của một chuỗi khác trong Go hay không? Ví dụ, tôi muốn kiểm tra someString.contains("something").
Câu trả lời:
Sử dụng hàm Containstừ gói chuỗi .
import (
"strings"
)
strings.Contains("something", "some") // true
Để so sánh, có nhiều lựa chọn hơn:
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
Điểm chuẩn:
Containscác cuộc gọi nội bộ Index, vì vậy tốc độ gần như giống nhau (btw Go 1.11.5 cho thấy sự khác biệt lớn hơn một chút so với Go 1.14.3).
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