[golang]golang EqualFold 字符串比较是否相等
Golang 字符串 是否 比较 相等
2023-09-27 14:26:52 时间
[golang]golang EqualFold 字符串比较是否相等
EqualFold 源码
strings.EqualFold
是忽略大小写的比较,返回bool
// 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 }
示例
package main import ( "fmt" "strings" ) func main(){ fmt.Println(strings.EqualFold("GoLang","golang")) fmt.Println(strings.EqualFold("golang","GoLang")) }
输出
true true
相关文章
- LiteIDE 中GDB模式下调试 Golang 程序单步执行不显示当前行的解决办法
- golang操作mysql数据库的规范
- golang之指针
- golang中包的初始化
- golang + qt5 开发GUI程序
- 【编程实践】Golang 字符串数组排序
- [Golang] 从零开始写Socket Server(1): Socket-Client框架
- GoLang 单元测试打桩和 mock
- 理解golang调度之一 :操作系统调度
- Golang-自动化监控教务系统成绩单
- Grpc-Golang&Grpc-Java
- Golang 网络编程(二)
- 学习Golang语言(6):类型--切片
- golang之pkg(包)
- golang遍历字符串
- LeetCode-575. 分糖果(Golang实现)
- Golang Context
- golang学习十一: 网络编程之HTTP