当前位置:首页 > 谈天说地

Go 字符串比较的实现示例

34资源网2022-01-24520
目录
  • compare 和 equalfold 区别
  • 忽略大小写比较

字符串比较, 可以直接使用 == 进行比较, 也可用用 strings.compare 比较

go 中字符串比较有三种方式:

  • == 比较
  • strings.compare 比较
  • strings.equslfold 比较
#### 代码示例
```go
fmt.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() function
package main

// importing fmt and strings
import (
    "fmt"
    "strings"
)

// calling main method
func 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 字符串比较的实现示例的文章就介绍到这了,更多相关go 字符串比较内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/6240.html

分享给朋友:

相关文章

100元内最好的音箱选择哪种好?看看这款适合你不?

100元内最好的音箱选择哪种好?看看这款适合你不?

目前市面上的音箱种类繁多,有的音质非常好,有的音质比较差,有些朋友酷爱音乐,可是又不想花太多钱在这些音箱上面,一般都会选择一些100元以内的音箱。那么100元内最好的音箱选择哪种好?下面,小编给大家推荐一款迷你型的小音箱,大家一起来看看吧。…

​50句名言警句摘抄大全

​50句名言警句摘抄大全

网上的名言警句有很多,相信大家想找的话,一下子就能找到几千上万句这类名言名句,这类名言名句只有短短的几个字,却蕴藏着巨大的人生哲理,有些可能对你的人生有很大帮助。喜欢名言警句的朋友,赶紧看下面小编摘录的50句名言警句吧,一定会对你有所帮助的…

win7开始菜单设置在哪里(win7开始菜单变成经典模式)

win7开始菜单设置在哪里(win7开始菜单变成经典模式)

我们在用win7系统的时候,发现打开了一些程序后,会在开始菜单那里显示这些最近打开的程序。有些人不想把自己最近打开的程序显示在这里,那么怎么可以删除这些程序,或者彻底让这里不会显示最近打开程序呢?下面我来教大家删除或设置不显示最近打开的程序…

乐视大厦5.7亿拍卖被公开质疑:竞拍人就是拍卖人!滴滴出行旗下APP恢复上架传闻不实;阿里或成全国首个灵活办公企业丨邦早报

乐视大厦5.7亿拍卖被公开质疑:竞拍人就是拍卖人!滴滴出行旗下APP恢复上架传闻不实;阿里或成全国首个灵活办公企业丨邦早报

【滴滴宣布将在纽交所退市 启动香港上市准备】12月3日上午9点,滴滴出行官方微博发布公告称,经认真研究,公司即日起启动在纽交所退市的工作,并启动在香港上市的准备工作。 【恒大2.6亿美元担保无法履约】12月3日晚间,中国恒大发布一则内幕消…

个人云存储哪个品牌好(云存储十大品牌排行榜)

个人云存储哪个品牌好(云存储十大品牌排行榜)

最近越来越多的视频博主开始在安利“私有云”存储,很多人觉得听起来偏硬核,平时也用不上,就没有过多去了解。可能是“云”这个概念容易让人觉得门槛很高,其实私有云没有大家想象中那么复杂,它的用法也可以很简单,并且能给我们的移动生活带来很多便利。…

最便宜的智能机手机(最新手机排行榜2021 )

最便宜的智能机手机(最新手机排行榜2021 )

这个双11的手机市场,各家确实都是全力以赴了,因为一方面下半年就是这个重要节点,另一方面市场需求也不是很高,更需要加速出货。这不,评价君看到,iQOO Neo5活力版也发力了,原价2299元的机型,到手价最低1899元,十分彪悍。 这款i…