一个使用unicode判断, 一个是正则判断。
结论,使用IsChinese unicode判断,效率更高。
func IsChinese(str string) bool {
var count int
for _, v := range str {
if unicode.Is(unicode.Han, v) {
count++
break
}
}
return count > 0
}
func IsChineseChar(str string) bool {
for _, r := range str {
if unicode.Is(unicode.Scripts["Han"], r) || (regexp.MustCompile("[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]").MatchString(string(r))) {
return true
}
}
return false
}
效率测试
var str = "This is China,这是中国"
func BenchmarkIsChinese(b *testing.B) {
for i := 0; i < b.N; i++ {
IsChinese(str)
}
}
func BenchmarkIsChineseChar(b *testing.B) {
for i := 0; i < b.N; i++ {
IsChineseChar(str)
}
}
go test -bench=. -benchmem
BenchmarkIsChinese-8 5583201 193 ns/op 0 B/op 0 allocs/op
BenchmarkIsChineseChar-8 27352 49335 ns/op 11920 B/op 168 allocs/op
PASS
有疑问加站长微信联系(非本文作者)