zoukankan      html  css  js  c++  java
  • [golang]golang EqualFold 字符串比较是否相等

    [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
  • 相关阅读:
    游标加标量函数
    将一个Excel文件分隔成多个
    网页抓取的一个小例子
    ajax跨域问题
    ssh连接至Ubuntu服务器时,提示以下错误:REMOTE HOST IDENTIFICATION HAS CHANGED!
    Python 实现汉诺塔问题(递归)
    Ubuntu下环境变量设置
    文件上传 jqueryForm
    Oracle数据库安装完成后相关问题的解决
    Java中16进制与字符串之间的相互转换
  • 原文地址:https://www.cnblogs.com/landv/p/13201251.html
Copyright © 2011-2022 走看看