导读 | 本文主要介绍了Go 字符串比较的实现示例,主要包括三种比较方式,具有一定的参考价值,感兴趣的可以了解一下 |
字符串比较, 可以直接使用 == 进行比较, 也可用用 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 字符串比较的实现示例的文章就介绍到这了。