Java字符串比較


字符串比較是常見的操作,比如比較數值大小、比較字符相等諸如此類的應用。在Java中,常見的比較字符串的方法主要有三種:equals()方法、equalslgnoreCase()方法和compareTo()方法。

注意:因為編寫的過程使用了MarkDown語法編寫,在輸入兩個等號時會在解析時出現錯誤,因此本文中所有使用到兩個等號的地方均在等號間添加了一個空格,在實際編寫代碼的過程中注意。

equals()方法

equals()方法逐個比較兩個字符串中的每個字符是否相同,分別返回True和False,檢查范圍包含大小寫,語法格式如下:

str1.equals(str2);

str1和str2可以是字符串變量,也可以是字符串字面量。例如下面的代碼是合法的:

"Hello".equals(getStr);

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)); // 輸出 false

equalslgnoreCase()方法

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

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

String str1 = "abc";
String str2 = "ABC";
System.out.println(str1.equalsIgnoreCase(str2));    // 輸出 true

equals()與= =的比較

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

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

String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1.equals(s2)); // 輸出true
System.out.println(s1 = = s2); // 輸出false

變量 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);

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

提示:如果兩個字符串調用 equals() 方法返回 true,那么調用 compareTo() 方法會返回 0。

引用

參考項 地址
比較方法 Java字符串比較(3種方法)

<- END ->


免責聲明!

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



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