簡單介紹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 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 字串比較的實現示例的文章就介紹到這了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2855247/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 字串-簡單字串比較字串
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- 前端動畫效果實現的簡單比較前端動畫
- java字串的簡單介紹(轉)Java字串
- arguments的應用示例簡單介紹
- 簡單介紹NMS的實現方法
- js字串連線簡單介紹JS字串
- 簡單介紹numpy實現RNN原理實現RNN
- Docker(3):Dockerfile介紹及簡單示例Docker
- 簡單介紹Go 語言單例模式Go單例模式
- RPC模式的介紹以及簡單的實現RPC模式
- javascript實現繼承方式簡單介紹JavaScript繼承
- javascript實現鏈式呼叫簡單介紹JavaScript
- [譯]WebAssembly: 帶有程式碼示例的簡單介紹Web
- javascript實現二維陣列實現簡單介紹JavaScript陣列
- jquery實現的元素居中外掛簡單介紹jQuery
- 執行緒池的介紹及簡單實現執行緒
- jquery解析json格式字串簡單介紹jQueryJSON字串
- text-overflow擷取字串簡單介紹字串
- fx 簡單介紹 [Go Hack 2017]Go
- 實現微信搖一搖功能簡單介紹
- 使用CORS實現ajax跨域簡單介紹CORS跨域
- 簡單介紹Go語言常用的打log方式Go
- 簡單介紹pytorch中log_softmax的實現PyTorch
- 簡單介紹VBS 批次Ping的專案實現
- jquery實現的操作class樣式類簡單介紹jQuery
- jquery實現的圖片預載入簡單介紹jQuery
- 簡單介紹python中的單向連結串列實現Python
- AngularJS實現的表單編輯提交功能簡單介紹AngularJS
- json字串與json物件簡單介紹JSON字串物件
- vue 實現原理及簡單示例實現Vue
- 用go 簡單實現的LRUGo
- ETL介紹與ETL工具比較
- 簡單介紹SpringMVC RESTFul實現列表功能SpringMVCREST
- 實現跨域iframe介面方法呼叫 簡單介紹跨域
- javascript模擬實現私有屬性簡單介紹JavaScript
- javascript如何實現模組程式設計簡單介紹JavaScript程式設計
- go 字串之 strings 包介紹Go字串