当前位置:首页 > 谈天说地 > 正文内容

Go 字符串比较的实现示例

34资源网2022年01月24日 21:07376
目录
  • 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 字符串比较内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

支付宝红包二维码

除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

看下图所示是好多参与这次活动领取红包的朋友:

支付宝红包

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

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

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

分享给朋友:

相关文章

穷人为什么穷?富人为什么富?两者区别是什么?
穷人为什么穷?富人为什么富?两者区别是什么?

穷人之所以穷,因为出生就没钱,受教育程度低,眼界比较狭隘,想要出人头地是很难的,除非你很努力。富人之所以富有,可能是因为他们出身很好,也有可能是后天努力的好。下面小编看到理想青年工作室一篇文章非常好,就转载了过来,希望大家看看穷人和富人的区...

用一个仍然造句和用三个仍然造句
用一个仍然造句和用三个仍然造句

用一个仍然造句:老张生病了,但他仍然坚守在工作岗位上。虽然他学习英语三年了,但他仍然不能流利的使用英语对话。当今社会仍然有很多贫困地区的孩子上不起学校。这么多年没有见到老朋友,他的样貌仍然美丽动人。用三个仍然造句:虽然小明的学习成绩一直不好...

工具人是什么意思,工具人是什么梗?
工具人是什么意思,工具人是什么梗?

最近网络上面出现比较多的一个词语就是“工具人”,那么,什么样的人会将他形容成是工具呢?这个是让网友们觉得比较的好奇的,主要是指的什么?在微博上面经常看到有网络语工具人这样的表达,所以引起了很多网友的关注,想要了解这个词语,那么工具人是什么意...

单身想找个女朋友,男的去哪里可以找个女朋友
单身想找个女朋友,男的去哪里可以找个女朋友

现在中国的男女比例失调,男的光棍要比女的多出3000w以上,这是个什么概念?代表着有3000w人是找不到对象的。所以很多单身男的就开始发愁了,单身想找个女朋友究竟到哪里找呢?说实话,小编也是一名单身汉,也正在找女朋友,虽然说,我没有找到女朋...

令人受益的三种说话方式了解一下
令人受益的三种说话方式了解一下

有人说:人与人之间最累的关系就是感觉话不投机,说得越多越费劲,最后只能无话可说其实,想让别人喜欢听你说话,要先掌握正确的表达方式。你对别人说话的样子,决定了你在别人眼中的样子。一是,多说你喜欢的,而不要总说你讨厌的。你可能碰到过这样的人,他...

100句非常经典的人生励志语录分享
100句非常经典的人生励志语录分享

1、不要皱眉,即使在伤心的时刻,因为你从不知道有谁会醉心于你的笑容。2、失去只是一种姿势,得到并不等同于幸福。3、真理和美女都是赤裸裸的。4、我们看错了这个世界,却说世界欺骗了我们。5、我们人这一辈子不是别人的楷模,就是别人的借鉴。6、千万...