Cách so sánh hai chuỗi trong Java
⚡ Tóm tắt thông minh
So sánh hai chuỗi trong Java Việc này có thể được thực hiện bằng nhiều phương pháp so khớp một chuỗi ký tự để kiểm tra sự bằng nhau hoặc thứ tự. Tài liệu này giải thích bảy cách tiếp cận, bao gồm so sánh bằng chuỗi (String equals), so sánh bằng đối tượng (Objects equals), compareTo, các phương thức của StringUtils, toán tử == và một phương thức so sánh tùy chỉnh, mỗi cách đều có ví dụ minh họa.

Phương pháp so sánh chuỗi trong Java
Java cung cấp các phương pháp khác nhau mà bạn có thể tận dụng để so sánh hai chuỗi trong Java. So sánh chuỗi trong Java là một tính năng khớp một chuỗi ký tự với một chuỗi.
Để tìm hiểu cách so sánh các chuỗi trong JavaBạn có thể sử dụng các phương thức được cung cấp bởi các lớp sau:
- Lớp String từ gói java.lang.
- Lớp Objects từ gói java.util.
- Lớp StringUtils từ gói org.apache.commons.lang3.
Hầu hết các Java Các phương thức so sánh chuỗi có giải pháp bỏ qua trường hợp chữ hoa/chữ thường. Trong hướng dẫn này, bạn sẽ tìm hiểu các phương thức khác nhau mà bạn có thể sử dụng để so sánh hai chuỗi.
Cách 1: Phương thức chuỗi bằng()
Java Chuỗi phương thức bằng() so sánh hai đối tượng chuỗi để có giá trị chuỗi bằng nhau.
Cú pháp:
public boolean equals(Object anObject)
tham số phương thức bằng():
anObject – Chuỗi đối số để so sánh các chuỗi.
các kiểu trả về của phương thức bằng()
- Trả về true nếu chuỗi ký tự được cung cấp giống với chuỗi đầu tiên.
- Trả về false nếu chuỗi đầu tiên không giống với chuỗi đối số.
Ví dụ:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
String stringThree = "GURU99";
System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
}
}
Đầu ra mong đợi:
is Guru99 equal to Guru99: true is Guru99 equal to GURU99: false
Giải thích:
- Bạn nhận được kết quả sai ở kết quả cuối cùng vì đối tượng được chỉ định có trường hợp khác.
Lưu ý: Sử dụng phương thức `equals()` của chuỗi để so sánh chuỗi có phân biệt chữ hoa chữ thường. Sử dụng phương thức `equalsIgnoreCase` để so sánh các đối tượng chuỗi mà không phân biệt chữ hoa chữ thường.
Cách 2: Phương thức đối tượng bằng()
Java Đối tượng bằng() phương thức này so sánh hai đối tượng chuỗi để xem chúng có cùng giá trị hay không.
Cú pháp:
public static boolean equals(Object a, Object b)
tham số phương thức bằng()
a – Chuỗi đối số cho đối tượng chuỗi đầu tiên.
b – Chuỗi đối số cho đối tượng chuỗi thứ hai.
các kiểu trả về của phương thức bằng()
- Trả về true nếu các chuỗi ký tự bằng nhau. Việc truyền giá trị null vào hai đối số cũng sẽ trả về giá trị true.
- Trả về false nếu các chuỗi ký tự không bằng nhau.
Ví dụ:
import java.util.Objects; public class CompareTwoStrings { public static void main(String[] args) { String stringOne = "Guru99"; String stringTwo = "Guru99"; System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo)); String stringThree = null; String stringFour = null; System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour)); } }
Đầu ra:
is Guru99 equal to Guru99: true is Guru99 equal to Guru99: true
Giải thích:
Từ ví dụ này, bạn có thể thấy rằng kết quả trả về là giá trị boolean true, vì các chuỗi được so sánh là bằng nhau.
Cách 3: Phương thức so sánh chuỗiTo()
Java So sánh chuỗiTo() phương pháp so sánh hai chuỗi theo thứ tự chữ cái. Nó thường được gọi là thứ tự từ điển.
Cú pháp:
public int compareTo(String str)
tham số phương thức so sánh()
str – Chuỗi để so sánh với chuỗi hiện tại.
Phương thức so sánh() trả về
- 0 – Trả về XNUMX nếu đối tượng được chỉ định bằng chuỗi hiện tại.
- < 0 – Trả về một số nhỏ hơn XNUMX nếu chuỗi này nhỏ hơn đối tượng được chỉ định.
- > 0 – Trả về số lớn hơn XNUMX nếu chuỗi này vượt quá chuỗi được cung cấp.
Ví dụ:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
String stringThree = "GURU99";
// u = 117, U = 85, result = 117-85 = 32
System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
}
}
Đầu ra mong đợi:
is Guru99 equal to Guru99: 0 is Guru99 equal to GURU99: 32
Giải thích:
Kết quả đầu tiên trả về giá trị bằng không, vì chuỗi thứ nhất và chuỗi thứ hai bằng nhau.
Kết quả thứ hai trả về giá trị ba mươi hai, vì các ký tự khác nhau.
Lưu ý: Để bỏ qua trường hợp chữ hoa/chữ thường, bạn có thể sử dụng phương thức “compareToIgnoreCase”.
Phương pháp 4: Phương thức StringUtils bằng()
Java StringUtils bằng() phương pháp so sánh sự bằng nhau của hai chuỗi ký tự.
Hãy đảm bảo bạn đã thêm thư viện “org.apache.commons.lang3” vào chương trình của mình. Điều này sẽ cho phép bạn so sánh các chuỗi bằng cách sử dụng các phương thức của StringUtils.
Đối với các dự án Maven, hãy sử dụng cái này hướng dẫn để thêm thư viện vào dự án.
Tuy nhiên, nếu bạn muốn thêm thư viện mà không cần bất kỳ công cụ biên dịch nào, hãy sử dụng cách này. hướng dẫn.
Cú pháp:
public static boolean equals(CharSequence cs1, CharSequence cs2)
Tham số phương thức StringUtils Equals()
- cs1 – Một chuỗi ký tự cho đối số đầu tiên.
- cs2 – Một chuỗi ký tự cho đối số thứ hai.
Phương thức StringUtils bằng() trả về
- Trả về true nếu kết quả so sánh chuỗi bằng nhau. Điều này cũng áp dụng nếu bạn truyền giá trị null vào hai đối số.
- Trả về false nếu so sánh chuỗi không bằng.
Ví dụ:
import org.apache.commons.lang3.StringUtils; public class CompareTwoStrings { public static void main(String[] args) { String stringOne = "Guru99"; String stringTwo = "Guru99"; System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo)); String stringThree = "GURU99"; System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree)); } }
Đầu ra:
is Guru99 equal to Guru99: true is Guru99 equal to GURU99: false
Giải thích:
Vì nội dung của chuỗi thứ nhất và chuỗi thứ hai bằng nhau nên kết quả trả về là true.
Bạn có thể sử dụng phương thức “equalsIgnoreCase” để bỏ qua trường hợp này.
Phương pháp 5: Phương thức StringUtils EqualsAny()
Java StringUtils bằngAny() phương thức kiểm tra xem một chuỗi có tồn tại trong các đối số hay không.
Cú pháp:
public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)
Tham số phương thức StringUtils EqualsAny()
- chuỗi – Giá trị chuỗi cho đối số đầu tiên. Đối số cũng có thể có giá trị null.
- searchStrings – Một tập hợp các đối số chuỗi cho phương thức để tìm xem chuỗi đối số đầu tiên có xuất hiện hay không.
Phương thức StringUtils EqualsAny() trả về
- Trả về true nếu chuỗi cần so khớp tồn tại trong số lượng chuỗi tìm kiếm thay đổi. Điều này áp dụng ngay cả khi cả hai đối số đều là null.
- Trả về false nếu chuỗi cần khớp không khớp với bất kỳ chuỗi nào trong số lượng chuỗi tìm kiếm có thể thay đổi.
Ví dụ:
import org.apache.commons.lang3.StringUtils; public class CompareTwoStrings { public static void main(String[] args) { String stringOne = "Guru99"; String[] stringTwo = new String[] { "Guru99", "JavaGuru99" }; System.out.println("is Guru99 available: " + StringUtils.equalsAny(stringOne, stringTwo)); String[] stringThree = new String[] { "GURU99", "JavaGuru99" }; System.out.println("is GURU99 available: " + StringUtils.equalsAny(stringOne, stringThree)); } }
Đầu ra:
is Guru99 available: true is GURU99 available: false
Giải thích:
Vì nội dung của chuỗi đầu tiên và chuỗi thứ hai bằng nhau nên kết quả trả về là true. Bạn có thể sử dụng phương thức “equalsAnyIgnoreCase” để bỏ qua trường hợp này.
Cách 6: Sử dụng toán tử ==
Toán tử == trên chuỗi kiểm tra xem các tham chiếu đối tượng có cùng địa chỉ hay không.
Ví dụ:
public class CompareTwoStrings {
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
String stringThree = "GURU99";
System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
}
}
Đầu ra mong đợi:
is Guru99 == to Guru99: true is Guru99 == to GURU99: false
Giải thích:
- Kết quả đầu tiên trả về giá trị boolean là true. Các chuỗi có cùng nội dung được thêm vào cùng một nhóm chuỗi, do đó các chuỗi này dùng chung một địa chỉ.
- Kết quả thứ hai trả về giá trị boolean là false. Các đối tượng có nội dung khác nhau, dẫn đến các nhóm chuỗi khác nhau. Điều này có nghĩa là các chuỗi có các tham chiếu đối tượng riêng biệt; do đó, kết quả đầu ra là false.
Phương pháp 7: Tạo phương thức tùy chỉnh để so sánh hai chuỗi trong Java
Tạo phương thức so sánh hai chuỗi theo thứ tự từ điển.
Cú pháp:
public static int compareTwoStrings(String str1, String str2)
Tham số phương thức tùy chỉnh
- str1 – Chuỗi cần so sánh.
- str2 – Chuỗi để so sánh.
Trả về phương thức tùy chỉnh
- 0 – Trả về XNUMX nếu chuỗi đầu tiên bằng chuỗi thứ hai.
- < 0 – Trả về một số nhỏ hơn XNUMX nếu chuỗi đầu tiên nhỏ hơn chuỗi thứ hai.
- > 0 – Trả về một số lớn hơn XNUMX nếu chuỗi đầu tiên lớn hơn chuỗi thứ hai.
Ví dụ:
public class CompareTwoStrings {
public static int compareTwoStrings(String stringOne, String stringTwo) {
int lengthOfStringOne = stringOne.length();
int lengthOfStringTwo = stringTwo.length();
int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
for (int i = 0; i < minStringLength; i++) {
char stringOneCharValue = stringOne.charAt(i);
char stringTwoCharValue = stringTwo.charAt(i);
if (stringOneCharValue != stringTwoCharValue) {
return stringOneCharValue - stringTwoCharValue;
}
}
if (lengthOfStringOne != lengthOfStringTwo) {
return lengthOfStringOne - lengthOfStringTwo;
} else {
return 0;
}
}
public static void main(String[] args) {
String stringOne = "Guru99";
String stringTwo = "Guru99";
System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
}
}
Đầu ra mong đợi:
is Guru99 equal to Guru99: 0
Giải thích:
Kết quả trả về giá trị bằng 0, nghĩa là hàm tùy chỉnh đang hoạt động như mong đợi.
