1. 程式人生 > >Java之 string 型別比大小

Java之 string 型別比大小

compare To:

String的compareTo其實就是依次比較兩個字串ASC碼。如果兩個字元的ASC碼相等則繼續後續比較,否則直接返回兩個ASC的差值。如果兩個字串完全一樣,則返回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;
    }

根據上面的程式碼,我們可以很方便的計算吃兩個字串的comperTo的值:

abcd".compareTo("adef")== -2
       "abc".compareTo("abcdef")== -3
       "abc".compareTo("abc") == 0

應用的話可以看一下這道題,對字串的字典序進行排序:例項

虛擬碼(升序):


		for(int i=0;i<f;i++) {
			for(int j=0;j<f-i-1;j++) {
				if(q[j].sorce<q[j+1].sorce) {
					w=q[j];
					q[j]=q[j+1];
					q[j+1]=w;
				}
				else if(q[j].sorce==q[j+1].sorce) {
					if(q[j].name.compareTo(q[j+1].name)>0) {
						w=q[j];
						q[j]=q[j+1];
						q[j+1]=w;
					}
				}
			}
		}