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
  • 相关阅读:
    Codeforces Round #234A
    Java中的字符串
    Codeforces Round #376A (div2)
    node源码详解 (一)
    node源码详解(三)
    node源码详解(四)
    修改bootstrap modal模态框的宽度
    Bootstrap 模态框(Modal)插件
    JavaScript局部变量和全局变量的理解
    Javascript:谈谈JS的全局变量跟局部变量
  • 原文地址:https://www.cnblogs.com/landv/p/13201251.html
Copyright © 2011-2022 走看看