登录
首页 >  Golang >  Go问答

验证字符串是否为 ASCII 字符串

来源:stackoverflow

时间:2024-03-03 11:09:27 352浏览 收藏

从现在开始,努力学习吧!本文《验证字符串是否为 ASCII 字符串》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

go 有什么方法或者有建议如何检查字符串是否只包含 ascii 字符?正确的做法是什么?

根据我的研究,解决方案之一是检查是否存在大于 127 的字符。

func isASCII(s string) bool {
    for _, c := range s {
        if c > unicode.MaxASCII {
            return false
        }
    }

    return true
}

解决方案


在 go 中,我们关心性能,因此,我们会对您的代码进行基准测试:

func isascii(s string) bool {
    for _, c := range s {
        if c > unicode.maxascii {
            return false
        }
    }
    return true
}

benchmarkrange-4    20000000    82.0 ns/op

更快(更好、更惯用)的版本,避免不必要的符文转换:

func isascii(s string) bool {
    for i := 0; i < len(s); i++ {
        if s[i] > unicode.maxascii {
            return false
        }
    }
    return true
}

benchmarkindex-4    30000000    55.4 ns/op

ascii_test.go

package main

import (
    "testing"
    "unicode"
)

func isasciirange(s string) bool {
    for _, c := range s {
        if c > unicode.maxascii {
            return false
        }
    }
    return true
}

func benchmarkrange(b *testing.b) {
    str := ascii()
    b.resettimer()
    for n := 0; n < b.n; n++ {
        is := isasciirange(str)
        if !is {
            b.fatal("notascii")
        }
    }
}

func isasciiindex(s string) bool {
    for i := 0; i < len(s); i++ {
        if s[i] > unicode.maxascii {
            return false
        }
    }
    return true
}

func benchmarkindex(b *testing.b) {
    str := ascii()
    b.resettimer()
    for n := 0; n < b.n; n++ {
        is := isasciiindex(str)
        if !is {
            b.log("notascii")
        }
    }
}

func ascii() string {
    byt := make([]byte, unicode.maxascii+1)
    for i := range byt {
        byt[i] = byte(i)
    }
    return string(byt)
}

输出:

$ go test ascii_test.go -bench=.
BenchmarkRange-4    20000000    82.0 ns/op
BenchmarkIndex-4    30000000    55.4 ns/op
$

看起来你的方式是最好的。

ASCII 简单定义为:

因此,字符的值为 0-27(或 0-127、0x0-0x7f)。

go 没有提供方法来检查字符串中的每个符文(或切片中的字节)是否具有特定范围内的数值,因此您的代码似乎是执行此操作的最佳方法。

好了,本文到此结束,带大家了解了《验证字符串是否为 ASCII 字符串》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>