Golang字符串比较
Golang 字符串比较
字符串比较, 可以直接使用 == 进行比较, 也可用用 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 欢迎关注工作号:程序员财富自由之路
参考资料https://www.geeksforgeeks.org/strings-equalfold-function-in-golang-with-examples/ https://cloud.tencent.com/developer/article/1651885
新兴技术落地,MicroLED直显技术引领新一代消费浪潮6月16日,利亚德推出MicroLED全系家用大电视,尺寸覆盖108英寸135英寸162英寸以及216英寸。纵观过去30年,LED显示行业发展路径可谓弹跳式飞跃,几乎每十年便迎来一
vivoX60Pro正式发布,优点很醒目,缺点很突兀作为年前最后一款骁龙888旗舰,很多人都对X60Pro充满了期待,但发布会后简直成了大型声讨现场外观作为X60系列的超大杯,vivoX60Pro的外观和之前的X60Pro基本一致。
LED显示行业精准抢占新风口提升发展质量效益纲要草案指出,着力提升发展质量效益,保持经济持续健康发展是十四五时期主要目标任务之一。发展是解决我国一切问题的基础和关键。必须坚持新发展理念,把新发展理念完整准确全
LED显示产业主线聚焦扩张P0。9上量,P0。6突破2021年的任务就是P0。9上量,P0。6突破!国内某小间距LED显示屏大厂领导,这样论述2021年的发展规划。在行业人士看来,新一轮miniled技术成熟和应用的崛起不可避免。未
商显大屏幕拼接市场发展趋势解读2020年,在政府刚性需求的驱动之下,大屏幕拼接市场在商显行业仍然表现出较好的成长潜力。根据奥维睿沃(AVCRevo)2020年中国大屏幕拼接市场研究报告显示2020年中国大陆大屏
解开MicroLED神秘面纱什么是MicroLED?MicroLED是一种发光二极管(LED),尺寸通常小于100微米(m),常见尺寸小于50m,有些甚至仅有315m。就比例而言,microLED的尺寸约为传
赛力斯华为智选SF5,为驾乘增添更多乐趣自从赛力斯华为智选SF5推出之后,新能源汽车市场就迎来了全新的面貌。它以不俗的实力迅速抓住人们的眼球。赛力斯华为智选SF5搭载赛力斯SEP200电机HUAWEIDriveONE三合
千里玛预售开启多款爆品亮相蓉城智能时代,有咖有WEY。8月29日,第二十四届成都国际汽车展览会拉开帷幕。在这一中国西部地区最具规模和影响力的年度汽车盛典上,此前已积聚声量,成为新一代网红车型的魏牌玛奇朵终于揭开
中签如中刀,日赚3亿的巨无霸中国移动上市,你敢申购吗10月29日证监会公告,中国移动将于11月4日首发上会。一石激起千层浪,立刻登上微博热搜,这意味着,如果中国移动上市顺利实施,三大运营商将齐聚A股市场。公开资料显示,中国移动本次拟
库斯途途胜L混动联袂成都车展首发亮相,北京现代火力全开2021年8月29日,以潮动蓉城乐驾不凡为主题的第二十四届成都国际汽车展览会如约而至,北京现代携全明星阵容登陆4号馆02展位。其中,作为北京现代加速产品布局,践行HSMART战略的
月销连续爆发式增长!比亚迪8月乘用车全系销售67630辆官方数据显示,比亚迪乘用车8月全系销售67630辆,同比增长90。5,环比增长18。7其中新能源乘用车销售60508辆,同比增长331。9。比亚迪的销量连续四个月大幅增长,不断刷新