1. 程式人生 > >String類 compareto()方法

String類 compareto()方法

    public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

上述為JDK原始碼。

value是一個常量字元陣列,在類中定義是: 

private final char value[];

由原始碼分析可知,len1是源字串的長度,len2是引數字串常數。lim為兩個字串的最小長度。

while語句中,從第一個字元開始,將源字串第n個字元和引數字串第n個字元,依次遞增比較(條件為:在較短字串長度內),比較過程中,若兩字串相同位置字元不相等,直接返回進行比較的兩字元的ASCII碼的差值,若字元相等,字元位置遞增再進行比較,直到兩字串有不同的字元出現,或者較短字串全部字元已比較完畢。

若較短字串為較長字串的字首,則返回兩者之間的長度差。

注意:此處值得一提的是return關鍵字,當執行到while語句中的return語句時,跳出迴圈且後面的語句不會繼續執行,函式結束得到返回值。

1、不同字元在較短字串長度之內時

返回值=原字串與引數字串中第一個不同字元相差的ASCII碼值,為原減參。

例子如下:

String str1="javasdrip";

String str2="javdscript";

str1.compareTo(str2);

此時返回值為-3,是a的ASCII碼(97)減去了d的ASCII碼值(100)得到。

注意:只比較第一個不同的字元,後面的d和c也不一樣但不會進行比較了。

2、不同字元在較短字串長度之外時

返回值=原字串與引數字串相差的字元個數,原字串長度大時為正,反之為負。

例子如下:

String str1="java";

String str2="javascript";

str1.compareTo(str2);

此時返回值為-6,是str1相比str2少去的字元個數。

注意:此時只比較位數,而無關ASCII碼值,並非是0的ASCII碼值減去s的ASCII碼值,在引數字串前面字元和原字串一樣時,返回值就是兩者相差的字元個數,即使改變後面的字元也不會影響到返回的值,比如String str2="java123$%^",此時結果仍是-6。

 

以下為練習鞏固:

返回值:

返回值是整型,它是先比較對應字元的大小(ASCII碼順序),如果第一個字元和引數的第一個字元不等,結束比較,返回他們之間的差值,如果第一個字元和引數的第一個字元相等,則以第二個字元和引數的第二個字元做比較,以此類推,直至比較的字串或被比較的字串有一方到最後一個字元。

  • 如果引數字串等於此字串,則返回值 0
  • 如果此字串長度小於字串引數,則返回一個小於 0 的值
  • 如果此字串長度大於字串引數,則返回一個大於 0 的值

印證1: 

public class Test {
    public static void main(String args[]) {
        String str1 = "Strings";

        String str2 = "Strings";

        String str3 = "Strings123";
 
        int result = str1.compareTo( str2 );
        System.out.println(result);
      
        result = str2.compareTo( str3 );
        System.out.println(result);
     
        result = str3.compareTo( str1 );
        System.out.println(result);
    }
}

以上程式執行結果為:

0
-3
3

印證2: 

String str1="abcde";

String str2="abdde";

str1.compareTo(str2);

這時的返回值是-1,即是c的ASCII碼(99)減去了d的ASCII碼(100)所得。