Go中不区分大小写的字符串比较
Posted
技术标签:
【中文标题】Go中不区分大小写的字符串比较【英文标题】:Case insensitive string comparison in Go 【发布时间】:2015-07-23 16:13:06 【问题描述】:如何以不区分大小写的方式比较字符串?
例如,“Go”和“go”应该被认为是相等的。
【问题讨论】:
【参考方案1】:https://golang.org/pkg/strings/#EqualFold 是您正在寻找的功能。它是这样使用的(来自链接文档的示例):
package main
import (
"fmt"
"strings"
)
func main()
fmt.Println(strings.EqualFold("Go", "go"))
【讨论】:
EqualFold 不比较 :( 排序可以使用strings.ToLower("Go")方法一:
func CompareStringsInCrudeWay(stringA, stringB string) (bool, error) if strings.ToLower(stringA) == strings.ToLower(stringB) return true, nil else return false, nil
方法二:
func Compare(stringA, stringB string) bool for i := 0; i < len(stringA); i++ if stringA[i] == stringB[i] continue if unicode.ToLower(stringA[i]) != unicode.ToLower(stringB[i]) return false return true
方法3:
func CompareStringsInEfficientWay(stringA, stringB string) (bool, error) if strings.EqualFold(stringA, stringB) return true, nil else return false, nil
方法 3 实际上是对方法 2 的包装,两者都是高效的。更多解释可以查看this blog。
【讨论】:
【参考方案3】:strings.EqualFold
的替代品,bytes.EqualFold
的工作方式相同
package main
import (
"bytes"
"fmt"
)
func main()
fmt.Println(bytes.EqualFold([]byte("Go"), []byte("go")))
https://golang.org/pkg/bytes/#EqualFold
【讨论】:
请将代码粘贴为代码,而不是图像。以上是关于Go中不区分大小写的字符串比较的主要内容,如果未能解决你的问题,请参考以下文章