美文网首页
spring类的compareToIgnoreCase()方法源

spring类的compareToIgnoreCase()方法源

作者: Mrmcling | 来源:发表于2020-07-27 22:24 被阅读0次

    compareToIgnoreCase方法,在字符串比较时,可以忽略大小写进行比较。

        // Spring类中的compareToIgnoreCase方法
        public int compareToIgnoreCase(String str) {
            return CASE_INSENSITIVE_ORDER.compare(this, str);
        }
        
        // Spring的类成员CASE_INSENSITIVE_ORDE(用来比较字符串时忽略大小写)
        public static final Comparator<String> CASE_INSENSITIVE_ORDE = new CaseInsensitiveComparator();
    
        // Spring类中的静态类;专门用来忽略字符串大小写的字符串比较。
        private static class CaseInsensitiveComparator
                implements Comparator<String>, java.io.Serializable {
            // use serialVersionUID from JDK 1.2.2 for interoperability
            private static final long serialVersionUID = 8575799808933029326L;
    
            public int compare(String s1, String s2) {
                // 1.获取两个字符串的长度
                int n1 = s1.length();
                int n2 = s2.length();
                
                // 2.获取两个字符串长度的最小值
                int min = Math.min(n1, n2);
          
                // 3.遍历两个字符串的每个字符,并做asc码大小的比较
                for (int i = 0; i < min; i++) {
                    char c1 = s1.charAt(i);
                    char c2 = s2.charAt(i);
                  
                    // 4.若不相同,则都转成大写比较 
                    if (c1 != c2) {
                        c1 = Character.toUpperCase(c1);
                        c2 = Character.toUpperCase(c2);
                  
                        // 5.此处英文情况下,大写比较如果不相同就表示字符串不相同了。但是此处为了国际化的兼容性,针对Georgian(格鲁吉亚)字母表奇怪的大小写转换规则而专门又增加了一步判断。
                        if (c1 != c2) {
                            c1 = Character.toLowerCase(c1);
                            c2 = Character.toLowerCase(c2);
                            if (c1 != c2) {
                                // 6.依旧不相同的时候,返回两个字符的asc码差值
                                return c1 - c2;
                            }
                        }
                    }
                }
                // 7.如果一次比下来asc码都相同,则返回两个字符串的长度差值。
                return n1 - n2;
            }
    
            /** Replaces the de-serialized object. */
            private Object readResolve() { return CASE_INSENSITIVE_ORDER; }
        }
    
    

    阅读心得:
    与compareTo功能一致,就是多了忽略大小写的功能。

    相关文章

      网友评论

          本文标题:spring类的compareToIgnoreCase()方法源

          本文链接:https://www.haomeiwen.com/subject/jxntrktx.html