這篇文章給大家分享的是有關(guān)java之String類的compareTo方法怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出蘇仙免費(fèi)做網(wǎng)站回饋大家。
先放上源碼
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; }
下面的是我自己寫(xiě)的山寨compareTo()方法, 經(jīng)測(cè)試, 結(jié)果與compareTo(String otherString)返回一致
說(shuō)明:
1. 為避免沖突, 我定義的方法名為compares
2. 注釋中已經(jīng)詳細(xì)地記錄了分析思路, 故對(duì)代碼不做過(guò)多說(shuō)明
public class StringDemo { @Test public void test() { // 因?yàn)閛的ASCII碼為: 111 // 因?yàn)閍的ASCII碼為: 97 // 所以差為 : 111 - 97 = 14 // 返回值為:14, 與compareTo返回結(jié)果一致 System.out.println(compares("hellojava", "hellajava")); } public static int compares(String firstString, String lastString) { /* * 算法思路分析: * 1. 獲取2個(gè)字符串, 首先把2個(gè)字符串都轉(zhuǎn)化為字符數(shù)組 (為后面一個(gè)一個(gè)字符進(jìn)行比較做鋪墊) * 2. 獲取2個(gè)字符串的長(zhǎng)度, 并把最短的字符串長(zhǎng)度作為循環(huán)的次數(shù) (這樣可以避免數(shù)組越界的異常) * 3. 把2個(gè)字符串從0開(kāi)始遍歷, 比較每一個(gè)字符, 若字符不相等時(shí), 則返回兩個(gè)字符串的差值 * 4. 如果遍歷的字符串都相等時(shí), 則返回兩個(gè)字符串的長(zhǎng)度差 * * 方法結(jié)果: * 1. 若兩個(gè)字符串長(zhǎng)度和字符都相等時(shí), 則返回0 * 2. 若兩個(gè)字符長(zhǎng)度不相等, 但大串完全包含(順序和字符都相等)小串字符時(shí), 則返回兩個(gè)字符串的長(zhǎng)度的差值 * 舉例: * 大串: helloworlds * 小串: helloworld * 因?yàn)榇蟠耆〈? 所以返回長(zhǎng)度的差值, 為1 * 3. 若兩個(gè)字符串長(zhǎng)度和字符都不相等時(shí), 則返回比較過(guò)程中, 某個(gè)索引位置上的字符之差 * 舉例: * 串1: hellojavas * 串2: hellajava * 遍歷比較后, 索引4的字符不同, 所以返回兩個(gè)字符的差值14, 'o' - 'a' = 14 */ /* * 1. 獲取2個(gè)字符串, 首先把2個(gè)字符串都轉(zhuǎn)化為字符數(shù)組 (為后面一個(gè)一個(gè)字符進(jìn)行比較做鋪墊) */ char[] firstCh = firstString.toCharArray(); char[] lastCh = lastString.toCharArray(); /* * 2. 獲取2個(gè)字符串的長(zhǎng)度, 并把最短的字符串長(zhǎng)度作為循環(huán)的次數(shù) (這樣可以避免數(shù)組越界的異常) */ int firstLength = firstCh.length; int lastLength = lastCh.length; int lim = Math.min(firstLength, lastLength); // 用k記錄比較的索引 int k = 0; while(k < lim) { char c1 = firstCh[k]; char c2 = lastCh[k]; // 3. 把2個(gè)字符串從0開(kāi)始遍歷, 比較每一個(gè)字符, 若字符不相等時(shí), 則返回兩個(gè)字符串的差值 if(c1 != c2) { return c1 - c2; } // 如果字符相等, 則讓索引加1 k++; } // 4. 如果遍歷的字符串都相等時(shí), 則返回兩個(gè)字符串的長(zhǎng)度差 return firstLength - lastLength; } }
感謝各位的閱讀!關(guān)于“java之String類的compareTo方法怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!