文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go如何实现字符串比较

2023-06-29 00:29

关注

这篇“Go如何实现字符串比较”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“Go如何实现字符串比较”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。

#### 代码示例```gofmt.Println("go"=="go")fmt.Println("GO"=="go")fmt.Println(strings.Compare("GO","go"))fmt.Println(strings.Compare("go","go"))fmt.Println(strings.EqualFold("GO","go"))

上述代码执行结果如下:

true
false
-1
0
true

Compare 和 EqualFold 区别

EqualFold 是比较UTF-8编码在小写的条件下是否相等,不区分大小写

// EqualFold reports whether s and t, interpreted as UTF-8 strings, // are equal under Unicode case-folding. func EqualFold(s, t string) bool

要注意的是 Compare 函数是区分大小写的, == 速度执行更快

// Compare is included only for symmetry with package bytes. // It is usually clearer and always faster to use the built-in // string comparison operators ==, <, >, and so on. func Compare(a, b string) int

忽略大小写比较

有时候要忽略大小写比较, 可以使用strings.EqualFold 字符串比较是否相等
源码实现

// EqualFold reports whether s and t, interpreted as UTF-8 strings,// are equal under Unicode case-folding, which is a more general// form of case-insensitivity.func EqualFold(s, t string) bool {    for s != "" && t != "" {        // Extract first rune from each string.        var sr, tr rune        if s[0] < utf8.RuneSelf {            sr, s = rune(s[0]), s[1:]        } else {            r, size := utf8.DecodeRuneInString(s)            sr, s = r, s[size:]        }        if t[0] < utf8.RuneSelf {            tr, t = rune(t[0]), t[1:]        } else {            r, size := utf8.DecodeRuneInString(t)            tr, t = r, t[size:]        }        // If they match, keep going; if not, return false.        // Easy case.        if tr == sr {            continue        }        // Make sr < tr to simplify what follows.        if tr < sr {            tr, sr = sr, tr        }        // Fast check for ASCII.        if tr < utf8.RuneSelf {            // ASCII only, sr/tr must be upper/lower case            if 'A' <= sr && sr <= 'Z' && tr == sr+'a'-'A' {                continue            }            return false        }        // General case. SimpleFold(x) returns the next equivalent rune > x        // or wraps around to smaller values.        r := unicode.SimpleFold(sr)        for r != sr && r < tr {            r = unicode.SimpleFold(r)        }        if r == tr {            continue        }        return false    }    // One string is empty. Are both?    return s == t}

通过源码可看到 if 'A' <= sr && sr <= 'Z' && tr == sr+'a'-'A'  可以看到不区分大小写的实现。
看个完整测试代码:

// Golang program to illustrate the// strings.EqualFold() Functionpackage main// importing fmt and stringsimport (    "fmt"    "strings")// calling main methodfunc main() {    // case insensitive comparing and returns true.    fmt.Println(strings.EqualFold("Geeks", "Geeks"))    // case insensitive comparing and returns true.    fmt.Println(strings.EqualFold("computerscience", "computerscience"))}

执行结构
true
true

以上是“Go如何实现字符串比较”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯