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