Java之 string 型別比大小
阿新 • • 發佈:2018-12-17
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; } } } }