首页 > 其他 > 详细

[golang]golang EqualFold 字符串比较是否相等

时间:2020-06-28 10:20:09      阅读:95      评论:0      收藏:0      [点我收藏+]

[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

 

[golang]golang EqualFold 字符串比较是否相等

原文:https://www.cnblogs.com/landv/p/13201251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!