Go 中不区分大小写的字符串比较
Case insensitive string comparison in Go
如何以不区分大小写的方式比较字符串?
例如,"Go"和"go"应该被认为是相等的。
https://golang.org/pkg/strings/#EqualFold 是您要查找的函数。它是这样使用的(链接文档中的示例):
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.EqualFold("Go", "go"))
}
有 strings.EqualFold
的替代方法,bytes.EqualFold
的工作方式相同
package main
import (
"bytes"
"fmt"
)
func main() {
fmt.Println(bytes.EqualFold([]byte("Go"), []byte("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
}
方法三:
func CompareStringsInEfficientWay(stringA, stringB string) (bool, error) {
if strings.EqualFold(stringA, stringB) {
return true, nil
} else {
return false, nil
}
}
方法三其实就是方法二的包装,两者都是高效的。您可以查看 this blog 以获得更多说明。
如何以不区分大小写的方式比较字符串?
例如,"Go"和"go"应该被认为是相等的。
https://golang.org/pkg/strings/#EqualFold 是您要查找的函数。它是这样使用的(链接文档中的示例):
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.EqualFold("Go", "go"))
}
有 strings.EqualFold
的替代方法,bytes.EqualFold
的工作方式相同
package main
import (
"bytes"
"fmt"
)
func main() {
fmt.Println(bytes.EqualFold([]byte("Go"), []byte("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 }
方法三:
func CompareStringsInEfficientWay(stringA, stringB string) (bool, error) { if strings.EqualFold(stringA, stringB) { return true, nil } else { return false, nil } }
方法三其实就是方法二的包装,两者都是高效的。您可以查看 this blog 以获得更多说明。