golang判断字符串是否含中文

百里江山 · · 6189 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一个使用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

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:百里江山

查看原文:golang判断字符串是否含中文

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6189 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传