简单介绍Go 字符串比较的实现示例

Posted wx5a20cf699eb6f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单介绍Go 字符串比较的实现示例相关的知识,希望对你有一定的参考价值。

本文主要介绍了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 字符串比较的实现示例的文章就介绍到这了。

本文地址:​​https://www.linuxprobe.com/go-linux-string.html​

以上是关于简单介绍Go 字符串比较的实现示例的主要内容,如果未能解决你的问题,请参考以下文章

Go语言基础语法(一)

转发分享go泛型的使用和基本思想

Python 连接MongoDB并比较两个字符串相似度的简单示例

Go-Micro框架入门教程---框架结构

GO富集分析简单介绍

Go/Python/Erlang编程语言对比分析及示例