Java字串的比較(equals()、equalsIgnoreCase()和compareTo())

2020-07-16 10:04:35
在 Java 中,比較字串的常用方法有 3 個:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面詳細介紹這 3 個方法的使用。

equals() 方法

equals() 方法將逐個地比較兩個字串的每個字元是否相同。對於字元的大小寫,也在檢查的範圍之內。equals() 方法的語法格式如下:
字串1.equals(字串2);

例如:
String str1="abc";
String str2=new String("abc");
String str3="ABC";
System.out.println(str1.equals(str2));    //輸出 true
System.out.println(str1.equals(str3));    //輸出 false

例 1

在第一次進入系統時要求管理員設定一個密碼,出於安全考慮密碼需要輸入兩次,如果兩次輸入的密碼一致才生效,否則提示失敗。具體實現程式碼如下:
import java.utii.Scanner; public class Testl2
{
    public static void main(String[] args)
    {
        String sys="學生資訊管理";
        System.out.println("歡迎進入《"+sys+"》系統");
        System.out.println("請設定一個管理員密碼:");
        Scanner input=new Scanner(System.in);
        String pass=input.next();    //設定密碼
        System.out.println("重複管理員密碼:");
        input=new Scanner(System.in);
        String pass1=input.next();    //確認密碼
        if(pass.equals(pass1))
        {   //比較兩個密碼
            System.out.println("已生效,請牢記密碼:"+ pass);
        }
        else
        {
            System.out.println("兩次密碼不一致,請重新設定。");
        }
    }
}

執行該程式,由於 equals() 方法區分大小寫,所以當兩次輸入的密碼完全一致時,equals() 方法返回 true,輸出結果如下所示:
歡迎進入《學生資訊管理》系統
請設定一個管理員密碼:
abcdef
重複管理員密碼:
abcdef
已生效,請牢記密碼:abcdef

否則輸出如圖下所示的結果:
歡迎進入《學生資訊管理》系統
請設定一個管理員密碼:
abcdef
重複管理員密碼:
aBcdef
兩次密碼不一致,請重新設定。

equalsIgnoreCase() 方法

equalsIgnoreCase() 方法的作用和語法與 equals() 方法完全相同,唯一不同的是 equalsIgnoreCase() 比較時不區分大小寫。例如:
String str1="abc";
String str2="ABC";
System.out.println(str1.equalsIgnoreCase(str2));    //輸出 true

例 2

在會員系統中需要輸入使用者名稱和密碼進行檢驗,下面使用 equalsIgnoreCase() 方法實現檢驗登入時不區分使用者名稱和密碼的大小寫,具體的程式碼實現如下所示。
public static void main(String[] args)
{
    String sys="學生資訊管理";
    System.out.println("歡迎進入《"+sys+"》系統");
    System.out.println("請輸入管理員名稱:");
    Scanner input=new Scanner(System.in);
    String name=input.next();    //獲取使用者輸入的名稱
    System.out.println("請輸入管理員密碼:");
    input=new Scanner(System.in);
    String pass=input.next();    //獲取使用者輸入的密碼
    //比較使用者名稱與密碼,注意此處忽略大小寫
    if(name.equalsIgnoreCase("admin")&&pass.equalsIgnoreCase("somboy"))
    {   //驗證
        System.out.println("登入成功。");
    }
    else
    {
        System.out.println("登入失敗。");
    }
}

在上述程式碼中,由於使用 equalsIgnoreCase() 方法進行比較,所以會忽略大小寫判斷。因此輸入 ADMIN 和 SOMBOY 也會驗證通過,如下所示:
歡迎進入《學生資訊管理》系統
請輸入管理員名稱:
ADMIN
請輸入管理員密碼:
SOMBOY
登入成功。

否則輸出結果如下所示:
歡迎進入《學生資訊管理》系統
請輸入管理員名稱:
admin
請輸入管理員密碼:
sommboy
登入失敗。

compareTo() 方法

compareTo() 方法用於按字典順序比較兩個字串的大小,該比較是基於字串各個字元的 Unicode 值。compareTo() 方法的語法格式如下:
str.compareTo(String otherstr);

它會按字典順序將 str 表示的字元序列與 otherstr 參數列示的字元序列進行比較。如果按字典順序 str 位於 otherster 引數之前,比較結果為一個負整數;如果 str 位於 otherstr 之後,比較結果為一個正整數;如果兩個字串相等,則結果為 0。

提示:如果兩個字串呼叫 equals() 方法返回 true,那麼呼叫 compareTo() 方法會返回 0。

例 3

編寫一個簡單的 Java 程式,演示 compareTo() 方法比較字串的用法,以及返回值的區別。程式碼如下:
public static void main(String[] args)
{
    String str="A";
    String str1="a";
    System.out.println("str="+str);
    System.out.println("str1="+str1);
    System.out.println("str.compareTo(str1)的結果是:"+str.compareTo(str1));
    System.out.println("str1.compareTo(str)的結果是:"+str1.compareTo(str));
    System.out.println("str1.compareTo('a')的結果是:"+str1.compareTo("a"));
}

上述程式碼定義了兩個字串"A"和"a", 然後呼叫 compareTo() 方法進行相互比較。最後一行程式碼拿"a"與"a"進行比較,由於兩個字串相同比較結果為 0。執行後的輸出結果如下:
str=A
str1=a
str.compareTo(str1)的結果是:-32
str1.compareTo(str)的結果是:32
str1.compareTo('a')的結果是:0