string - 语言。我想检查字符串的内容是否符合条件。如何在速度方面有效地在 Go 语言中做到这一点?

标签 string go

字符串将只包含 0 或 4。该字符串将以 4 开头。例如:444、44、40、4400、4440 等。这些都是有效的字符串,但 404 无效。 目前,我正在检查 4 是否紧跟在 0 之后。我不确定这个是否有效。

最佳答案

如果你的意思是领先 4 和跟随 0

使用正则表达式

package main

import (
    "regexp"
)

func check(s string) bool {
    return regexp.MustCompile(`^4+0*$`).MatchString(s)
}

func main() {
    for _, tt := range []string{"444", "44", "40", "4400", "4440"} {
        if !check(tt) {
            panic("want true: " + tt)
        }
    }
    for _, tt := range []string{"404", "040"} {
        if check(tt) {
            panic("want false: " + tt)
        }
    }
}

非正则表达式

package main

func check(s string) bool {
    i := 0
    r := []rune(s)
    for i = 0; i < len(r); i++ {
        if r[i] != '4' {
            break
        }
    }
    if i == 0 {
        return false
    }
    for ; i < len(r); i++ {
        if r[i] != '0' {
            return false
        }
    }
    return true
}

func main() {
    for _, tt := range []string{"444", "44", "40", "4400", "4440"} {
        if !check(tt) {
            panic("want true: " + tt)
        }
    }
    for _, tt := range []string{"404", "040"} {
        if check(tt) {
            panic("want false: " + tt)
        }
    }
}

更快的版本

func check(s string) bool {
    i, l := 0, len(s)
    for ; i < l; i++ {
        if s[i] != '4' {
            break
        }
    }
    if i == 0 {
        return false
    }
    for ; i < l; i++ {
        if s[i] != '0' {
            return false
        }
    }
    return true
}

关于string - 语言。我想检查字符串的内容是否符合条件。如何在速度方面有效地在 Go 语言中做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820370/

相关文章:

javascript - 正则表达式从字符串中删除数字(仅限年份)

c# - ToCharArray 和 ToArray 之间的区别

string - 在Go中的某些参数之前和之后拆分字符串

string - 不可变字符串和指针地址

go - Go语言Vs代码如何调试部署在本地服务器上的RestApi

php - 如何在 PHP 中将此字符串操作函数转换为 UTF-8 兼容?

GOLang Scanf 错误

去全局变量不反射(reflect)正确的值

go - 如何将golang类型结构中的列类型定义为longtext?

java - 无法从 SQL Server 正确获取由 ASCII 值组成的值