Java學習筆記6---字符串比較方法compareTo(String str)


方法原型為int compareTo(String str),返回值為int型,參數為字符串類型。

下面是簡單示例:

/*
 * compareTo()返回參與比較的兩個字符串的ascii碼差值
 * Object類....
 */
package packagetest;
public class StringCompareEmp{
    public void printCompare() {
//    public static void main(String[] args) {
//        int indexI = 3;
//        String firststr = "This String";
//        String secondstr = "this string";
//        Object objstr = firststr;
        
        String str1 = "a";
        String str2 = "b";
        String str3 = "abc";
        String str4 = "ab";
        String str5 = "abcde";
//        String str6 = "a";
        String str7 = "abb";
        String str8 = "ae";
//        String str9 = "c";
        String str10 = "abcd";
        String str11 = "abea";
        String str12 = "cde";
        
//        System.out.println( firststr + " 第" + (indexI+1) + "個字符是:" + firststr.charAt(indexI) );//char charAt(int)
//        System.out.println( firststr + " 與  " + secondstr + " 按字典順序比較,結果為:" + firststr.compareTo(secondstr) );//int compareTo(String),按字典順序比較兩個字符串
//        System.out.println( firststr + " 與  " + secondstr + " 按字典順序比較並且不考慮大小寫,結果為:" + firststr.compareToIgnoreCase(secondstr) );//int compareToIgnoreCase(String),按字典順序比較兩個字符串,不考慮大小寫
//        System.out.println( firststr + " 與  " + objstr + " 比較,結果為:" + firststr.compareTo(objstr.toString()) );//int compareTo(Object),把字符串與另一個對象比較


        // 兩個字符串首字母不同,則返回首字母的ascii差值
        System.out.println( "兩個字符串首字母不同,則返回首字母的ascii差值:" );
        System.out.println( str1 + " 與 " + str2 + " 按字典順序比較,結果為: " + str1.compareTo(str2) );
        System.out.println( str4 + " 與 " + str2 + " 按字典順序比較,結果為: " + str4.compareTo(str2) );
        System.out.println( str5 + " 與 " + str2 + " 按字典順序比較,結果為: " + str5.compareTo(str2) );
        System.out.println( str1 + " 與 " + str12 + " 按字典順序比較,結果為: " + str1.compareTo(str12) );
        System.out.println( str4 + " 與 " + str12 + " 按字典順序比較,結果為: " + str4.compareTo(str12) );
        System.out.println( str5 + " 與 " + str12 + " 按字典順序比較,結果為: " + str5.compareTo(str12) );
        System.out.println("\n");
        //兩個字符串相同時,返回0
//        System.out.println("兩個字符串相同,返回0:");
        
        
        //首字母相同,則比較下一個字符,直到有不同的為止或比較到字符串最后一個字符,返回該不同的字符的ascii差值;如果兩字符串長度不同,可以參與比較的字符又完全一樣,返回兩個字符串的長度差值
//        System.out.println( "首字母相同,則比較下一個字符,直到有不同的為止或比較到字符串最后一個字符,返回該不同的字符的ascii差值;如果兩字符串長度不同,可以參與比較的字符又完全一樣,返回兩個字符串的長度差值:" );    
        System.out.println("首字母相同,則比較下一個字符,直到有不同的為止,返回此兩個不同字符的ascii差值。");
        System.out.println( str10 + " 與 " + str11 + " 按字典順序比較,結果為: " + str10.compareTo(str11) );
        System.out.println( str10 + " 與 " + str7 + " 按字典順序比較,結果為: " + str10.compareTo(str7) );
        System.out.println( str11 + " 與 " + str3 + " 按字典順序比較,結果為: " + str11.compareTo(str3) );
        System.out.println("\n");
        
        System.out.println("如果恰好是最后一個字符不同,則返回最后一個字符的ascii差值:");
        System.out.println( str3 + " 與 " + str7 + " 按字典順序比較,結果為: " + str3.compareTo(str7) );
        System.out.println( str4 + " 與 " + str8 + " 按字典順序比較,結果為: " + str4.compareTo(str8) );
        System.out.println("\n");
        
        System.out.println("特殊情況下,最后一個字符也相同,則兩字符串相同,返回最后一個字符的ascii差值,即返回0:");
        System.out.println( str1 + " 與 " + str1 + " 按字典順序比較,結果為: " + str1.compareTo(str1) );
        System.out.println( str4 + " 與 " + str4 + " 按字典順序比較,結果為: " + str4.compareTo(str4) );
        System.out.println( str5 + " 與 " + str5 + " 按字典順序比較,結果為: " + str5.compareTo(str5) );
        System.out.println("\n");
        
        System.out.println("如果其中一個字符串比較到最后一個字符了,另一個字符串還有其他未比較字符,則返回兩字符串長度的差值:");
        System.out.println( str4 + " 與 " + str1 + " 按字典順序比較,結果為: " + str4.compareTo(str1) );
        System.out.println( str3 + " 與 " + str1 + " 按字典順序比較,結果為: " + str3.compareTo(str1) );
        System.out.println( str3 + " 與 " + str4 + " 按字典順序比較,結果為: " + str3.compareTo(str4) );
            
        System.out.println( str5 + " 與 " + str1 + " 按字典順序比較,結果為: " + str5.compareTo(str1) );
        System.out.println( str5 + " 與 " + str4 + " 按字典順序比較,結果為: " + str5.compareTo(str4) );
        System.out.println( str5 + " 與 " + str3 + " 按字典順序比較,結果為: " + str5.compareTo(str3) );
        System.out.println( str3 + " 與 " + str5 + " 按字典順序比較,結果為: " + str3.compareTo(str5) );

    }
}
View Code

 

運行結果如下:

兩個字符串首字母不同,則返回首字母的ascii差值:

a 與 b 按字典順序比較,結果為: -1

ab 與 b 按字典順序比較,結果為: -1

abcde 與 b 按字典順序比較,結果為: -1

a 與 cde 按字典順序比較,結果為: -2

ab 與 cde 按字典順序比較,結果為: -2

abcde 與 cde 按字典順序比較,結果為: -2

 

 

首字母相同,則比較下一個字符,直到有不同的為止,返回此兩個不同字符的ascii差值。

abcd 與 abea 按字典順序比較,結果為: -2

abcd 與 abb 按字典順序比較,結果為: 1

abea 與 abc 按字典順序比較,結果為: 2

 

 

如果恰好是最后一個字符不同,則返回最后一個字符的ascii差值:

abc 與 abb 按字典順序比較,結果為: 1

ab 與 ae 按字典順序比較,結果為: -3

 

 

特殊情況下,最后一個字符也相同,則兩字符串相同,返回最后一個字符的ascii差值,即返回0:

a 與 a 按字典順序比較,結果為: 0

ab 與 ab 按字典順序比較,結果為: 0

abcde 與 abcde 按字典順序比較,結果為: 0

 

 

如果其中一個字符串比較到最后一個字符了,另一個字符串還有其他未比較字符,則返回兩字符串長度的差值:

ab 與 a 按字典順序比較,結果為: 1

abc 與 a 按字典順序比較,結果為: 2

abc 與 ab 按字典順序比較,結果為: 1

abcde 與 a 按字典順序比較,結果為: 4

abcde 與 ab 按字典順序比較,結果為: 3

abcde 與 abc 按字典順序比較,結果為: 2

abc 與 abcde 按字典順序比較,結果為: -2

test

 

總結:

兩字符串首字母不同則返回首字母的ascii差值;

首字母相同,則比較下一位,直到有不同的字符為止,返回此兩個不同字符的ascii差值;

如果恰好是最后一個字符不同,則返回最后一個字符的ascii差值;

特殊情況下,最后一個字符也相同,則兩個字符串相同,返回最后一個字符的ascii差值,也就是0;

如果一個字符串比較到最后一個字符了,另一個字符串還有其他未比較字符,則返回此兩個字符串長度的差值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM