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") > EqualFold 不比较 @lunicon 什么意思? @KBN,比较操作可以说“更多,更少或等于”,EqualFold retrun boolean【参考方案2】:

方法一:

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中不区分大小写的字符串比较的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中不区分大小写的字符串替换?

字符串属性的 gql 查询中不区分大小写的 where 子句

Pig Latin 中不区分大小写的搜索

不区分大小写的比较NSString

Oracle中不区分大小写的主键

== 在 PHP 中是区分大小写的字符串比较吗?