zoukankan      html  css  js  c++  java
  • String中的CompareTo

      在API源码中,String的compareTo其实就是一次比较两个字符串的ASCII码。如果两个字符串的ASCII相等则继续后续比较,否则直接返回两个ASCII的差值。如果两个字符串完全一样,则返回0.下面是源码:

    public int compareTo(String anotherString) {
        int len1 = count;
        int len2 = anotherString.count;
        //获取到两个字符串的较短的长度
        int n = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        if (i == j) {
            int k = i;
            int lim = n + i;
            while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                //如果两个字符的ASC不相同,则直接返回
    if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
            }
        } else {
            while (n-- != 0) {
               char c1 = v1[i++];
               char c2 = v2[j++];
                 //如果两个字符的ASC不相同,则直接返回
               if (c1 != c2) {
                   return c1 - c2;
               }
            }
        }
        //如果都一样,返回两个字符串的长度查
        return len1 - len2;
        }

    由上面的代码,我们可以很方便计算两个字符串的compareTo的值:

      

      int i1 = "abcd".compareTo("adhf");
      int i2 = "abc".compareTo("abcdef");
      int i3 = "abcd".compareTo("abc");

      System.out.println(i1);//-2
      System.out.println(i2);-3
      System.out.println(i3);0

      举例:compareTo的实际应用?于进行简单的字符串排序。(例如使用compareTo进行姓名的排序)

      

    // 使用简单的循环排序
            for (int i = 0; i < array.length - 1; i++) {
                for (int j = i + 1; j < array.length; j++) {
                    if (array[i].compareTo(array[j]) > 0) {
                        String temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
    
                    }
                }
            }
    
            for (int i = 0; i < 5; i++) {
    
                System.out.println(array[i]);
            }
        }

    针对上面String的排序后,字符串的内容将会是:

    james  libai  lilei  owen  wolf  

  • 相关阅读:
    Linux下汇编语言学习笔记51 ---
    Linux下汇编语言学习笔记50 ---
    Linux下汇编语言学习笔记47 ---
    Linux下汇编语言学习笔记46 ---
    Linux下汇编语言学习笔记45 ---
    Java奇葩笔试题
    Java奇葩笔试题
    Xcode 5 下的单元测试
    Xcode 5 下的单元测试
    Xcode5 统计单元测试覆盖率(仅限XCTest)
  • 原文地址:https://www.cnblogs.com/vivi-d/p/4161007.html
Copyright © 2011-2022 走看看