實現兩個字元串的比較「兩個字元串比較是否相等」

字元串比較是常見的操作,包括比較相等、比較大小、比較前綴和後綴串等。在Java中,比較字元串的常用方法有3個:equals()方法、equalsIgnoreCase()方法、compareTo()方法。下面詳細介紹這3個方法的使用。

Java字元串比較(3種方法)

equals()方法

equals()方法將逐個地比較兩個字元串的每個字元是否相同。如果兩個字元串具有相同的字元和長度,它返回true,否則返回false。對於字元的大小寫,也在檢查的範圍之內。equals()方法的語法格式如下:

str1.equals(str2);1複製代碼類型:[java]

str1和str2可以是字元串變數,也可以是字元串字面量。例如,下列表達式是合法的:

"Hello".equals(greeting)1複製代碼類型:[java]

下面的代碼說明了equals()方法的使用:

String str1 = "abc";
String str2 = new String("abc");
String str3 = "ABC";
System.out.println(str1.equals(str2)); // 輸出 true
System.out.println(str1.equals(str3)); // 輸出 false12345複製代碼類型:[java]

例1

在第一次進入系統時要求管理員設置一個密碼,出於安全考慮密碼需要輸入兩次,如果兩次輸入的密碼一致才生效,否則提示失敗。具體實現代碼如下:

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("兩次密碼不一致,請重新設置。");
    }
}123456789101112131415複製代碼類型:[java]

運行該程序,由於equals()方法區分大小寫,所以當兩次輸入的密碼完全一致時,equals()方法返回true,輸出結果如下所示:

歡迎進入《學生信息管理》系統
請設置一個管理員密碼:
abcdef
重複管理員密碼:
abcdef
已生效,請牢記密碼:abcdef123456複製代碼類型:[java]

否則輸出如圖下所示的結果:

歡迎進入《學生信息管理》系統
請設置一個管理員密碼:
abcdef
重複管理員密碼:
aBcdef
兩次密碼不一致,請重新設置。123456複製代碼類型:[java]

equalsIgnoreCase()方法

equalsIgnoreCase()方法的作用和語法與equals()方法完全相同,唯一不同的是equalsIgnoreCase()比較時不區分大小寫。當比較兩個字元串時,它會認為A-Z和a-z是一樣的。

下面的代碼說明了equalsIgnoreCase()的使用:

String str1 = "abc";
String str2 = "ABC";
System.out.println(str1.equalsIgnoreCase(str2));    // 輸出 true123複製代碼類型:[java]

例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("登錄失敗。");
    }
}12345678910111213141516複製代碼類型:[java]

在上述代碼中,由於使用equalsIgnoreCase()方法進行比較,所以會忽略大小寫判斷。因此輸入ADMIN和SOMBOY也會驗證通過,如下所示:

歡迎進入《學生信息管理》系統
請輸入管理員名稱:
ADMIN
請輸入管理員密碼:
SOMBOY
登錄成功。123456複製代碼類型:[java]

否則輸出結果如下所示:

歡迎進入《學生信息管理》系統
請輸入管理員名稱:
admin
請輸入管理員密碼:
sommboy
登錄失敗。123456複製代碼類型:[java]

equals()與==的比較

理解equals()方法和==運算符執行的是兩個不同的操作是重要的。如同剛才解釋的那樣,equals()方法比較字元串對象中的字元。而==運算符比較兩個對象引用看它們是否引用相同的實例。

下面的程序說明了兩個不同的字元串(String)對象是如何能夠包含相同字元的,但同時這些對象引用是不相等的:

String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1.equals(s2)); // 輸出true
System.out.println(s1 == s2); // 輸出false1234複製代碼類型:[java]

變數s1指向由「Hello」創建的字元串實例。s2所指的的對象是以s1作為初始化而創建的。因此這兩個字元串對象的內容是一樣的。但它們是不同的對象,這就意味著s1和s2沒有指向同一的對象,因此它們是不==的。

因此,千萬不要使用==運算符測試字元串的相等性,以免在程序中出現糟糕的bug。從表面上看,這種bug很像隨機產生的間歇性錯誤。

對於習慣使用C++的String類的人來說,在進行相等性檢測的時候一定要特別小心。C++的String類重載了==運算符以便檢測字元串內容的相等性。可惜Java沒有採用這種方式,它的字元串「看起來、感覺起來」與數值一樣,但進行相等性測試時,其操作方式又類似於指針。語言的設計者本應該像對C++那樣也進行特殊處理,即重定義==運算符。

當然,每一種語言都會存在一些不太一致的地方。C程序員從不使用==對字元串進行比較,而使用strcmp函數。Java的compareTo方法與strcmp完全類似。所以下面我們來介紹Java的compareTo方法。

compareTo()方法

通常,僅僅知道兩個字元串是否相同是不夠的。對於排序應用來說,必須知道一個字元串是大於、等於還是小於另一個。一個字元串小於另一個指的是它在字典中先出現。而一個字元串大於另一個指的是它在字典中後出現。字元串(String)的compareTo()方法實現了這種功能。

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

str.compareTo(String otherstr);1複製代碼類型:[java]

它會按字典順序將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"));
}123456789複製代碼類型:[java]

上述代碼定義了兩個字元串「A」和「a」,然後調用compareTo()方法進行相互比較。最後一行代碼拿「a」與「a」進行比較,由於兩個字元串相同比較結果為0。運行後的輸出結果如下:

str = A
str1 = a
str.compareTo(str1)的結果是:-32
str1.compareTo(str)的結果是:32
str1.compareTo('a')的結果是:0

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/208822.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 15:21
下一篇 2024-12-08 15:21

相關推薦

發表回復

登錄後才能評論