专栏首页landv[golang]golang EqualFold 字符串比较是否相等

[golang]golang EqualFold 字符串比较是否相等

[golang]golang EqualFold 字符串比较是否相等

EqualFold 源码

strings.EqualFold 是忽略大小写的比较,返回bool

// 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
}

示例

package main

import (
    "fmt"
    "strings"
)

func main(){

    fmt.Println(strings.EqualFold("GoLang","golang"))
    fmt.Println(strings.EqualFold("golang","GoLang"))
}

输出

true
true

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • c语言_头文件

    landv
  • 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

    没错就是这么神奇,名字相当噶性,thefuck。当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令。

    landv
  • [西软xms]会员卡消费和余额情况表

    landv
  • -企业面试题: display:none和visibility:hidden的区别?

    - display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。

    舒克
  • 模拟儿童学习多语言,Deepmind让DL看视频就学会翻译

    儿童可以通过观察自己的环境并与他人互动来学习多种语言,而无需任何明确的监督或指导。他们在观察相同情况时不会同时听到一个句子及其翻译;

    新智元
  • [SpingBoot guides系列翻译]Redis的消息订阅发布

    这节讲的是用Redis来实现消息的发布和订阅,这里会使用Spring Data Redis来完成。

    _淡定_
  • 助力远程研发协作,TAPD免费开放企业版

    在这个不寻常的春节假期,新型肺炎疫情一直牵动着所有人的心。 在几天前,TAPD腾讯敏捷协作平台已与腾讯其他办公协同类产品一起,免费开放企业版线上协作能力,为抗...

    TAPD敏捷研发
  • 一个500强公司的数据化运营管理实践

    企业的信息化管理是一条漫长而崎岖的道理,当然这里也不乏创新的火花。关于信息化建设随企业所处环境、行业的不同而不同。那作为一个成熟的企业,在如今这个大数据浪潮下,...

    小莹莹
  • 【访谈】如何对上市公司进行财务分析

    昨天,雪球邀请我做了一期文字访谈,内容是“怎样发现投资路上的陷阱,避开黑天鹅”。做为一个成名的“踩雷专家”,避开黑天鹅我不拿手,碰到了哪些黑天鹅我倒是...

    机器学习AI算法工程
  • 【serverless实战】腾讯云·云开发+nextjs(SSR or 静态导出)实现官网动态化

    www.cloudbase.net 云开发网站是基于 nextjs 开发,里面的内容是写在 js 配置文件。每当更新网站内容,都需要提交 git,并且本地进行静...

    心谭博客

扫码关注云+社区

领取腾讯云代金券