首页 > 代码库 > String中的CompareTo

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  

 

String中的CompareTo