当前位置:网站首页>Go 字符串比较
Go 字符串比较
2022-06-23 09:35:00 【51CTO】
golang 字符串比较
字符串比较, 可以直接使用 == 进行比较, 也可用用 strings.Compare 比较
go 中字符串比较有三种方式:
-
== 比较 -
strings.Compare 比较 -
strings.EquslFold 比较
上述代码执行结果如下:
Compare 和 EqualFold 区别
-
EqualFold 是比较UTF-8编码在小写的条件下是否相等,不区分大小写
- 要注意的是
Compare 函数是区分大小写的, == 速度执行更快
忽略大小写比较
有时候要忽略大小写比较, 可以使用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
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
通过源码可看到 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"))
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
执行结构
获得更多内容,关注公众号程序员财富自由之路

公众号:程序员财富自由之路
关注我们,了解更多
参考资料
- https://www.geeksforgeeks.org/strings-equalfold-function-in-golang-with-examples/
- https://cloud.tencent.com/developer/article/1651885
边栏推荐
猜你喜欢

Mysql database introduction summary

Typora设置图片上传服务

学习SCI论文绘制技巧(F)

Notes on using the coding code base

ThinkPHP 2. X/3.0 vulnerability recurrence

2022 Gdevops全球敏捷运维峰会-广州站精华回放(附ppt下载)

Learn SCI thesis drawing skills (f)
Redis learning notes - publish and subscribe
Redis学习笔记—慢查询分析
[nanopi2 trial experience] the first step of bare metal
随机推荐
全局快门和卷帘快门的区别
[SUCTF 2019]CheckIn
ICLR 2022 | 视频中的动态卷积TAdaConv以及高效的卷积视频理解模型TAdaConvNeXt
UEFI source code learning 4.1 - pcihostbridgedxe
xml相关面试题
Redis学习笔记—地理信息定位(GEO)
GPIO novice
map的下标操作符
[極客大挑戰 2019]HardSQL
也无风雨也无晴
Cesium加载正射影像方案
进入小公司的初级程序员要如何自我提高?
【CTF】bjdctf_ 2020_ babyrop
Bit binding
Difference between global shutter and roller shutter
Sequential representation and implementation of sequencelist -- linear structure
What is BFC? What problems can BFC solve
Redis学习笔记—遍历键
给RepVGG填坑?其实是RepVGG2的RepOptimizer开源
[极客大挑战 2019]HardSQL