Vấn đề: Làm thế nào để so sánh 2 chuỗi trong Java?
Khi mới lập trình với Java rất dễ nhầm lẫn là sử dụng toán tử == để so sánh xem hai chuỗi có giống nhau không, tuy nhiên đó là không phải là cách làm đúng trong Java.
Trong bài này mình sẽ trình bày đến các bạn các cách so sánh chuỗi đúng trong Java, từ cách phổ biến hay được dùng nhiều nhất. Ở cuối bài mình cũng giải thích tại sao không dùng toán tử == trong so sánh chuỗi với Java.
Lựa chọn 1: So sánh chuỗi trong Java với phương thức: equals
Phần lớn mình sử dụng khoảng 95% phương thức equals của lớp String.
if (string1.equals(string2))Phương thức equals nhìn vào 2 chuỗi, nếu từng ký tự trong chuỗi đó giống nhau thì 2 chuỗi đó giống nhau.
Nhìn vào ví dụ sau, 2 chuỗi sẽ không bằng nhau vì từng ký tự trong chuỗi không bằng nhau (Hàm equals sẽ trả về false). Bạn chú ý ký tự in hoa và in thường là khác nhau nhé.
String string1 = "Sinh Vien CNTT";Nhưng khi từng ký tự trong hai chuỗi giống nhau thì hàm equals sẽ trả về kết quả true nghĩa là hai chuỗi giống nhau, bạn xem ví dụ sau:
String string2 = "sinh vien cntt";
if (string1.equals(string2))
{
// Dòng này sẽ không được in ra vì hai chuỗi không bằng nhau
System.out.println("Hai chuỗi bằng nhau.")
}
String string1 = "Sinh Vien CNTT";Lựa chọn 2: So sánh chuỗi trong Java với phương thức: equalsIgnoreCase
String string2 = "Sinh Vien CNTT";
if (string1.equals(string2))
{
// Dòng này sẽ được in ra vì hai chuỗi bằng nhau
System.out.println("Hai chuỗi bằng nhau.");
}
Trong một số trường hợp bạn muốn việc kiểm tra hai chuỗi không kiểm tra ký tự là in hoa hay in thường thì dùng hàm equalsIgnoreCase của lớp String như sau:
String string1 = "Sinh Vien CNTT";Lựa chọn 3: So sánh chuỗi trong Java với phương thức: compareTo
String string2 = "sinh vien cntt";
if (string1.equals(string2))
{
// Hai chuỗi bằng nhau vì ký tự in hoa bằng ký tự thường
// Dòng này sẽ được in ra vì hai chuỗi bằng nhau
System.out.println("Hai chuỗi bằng nhau.");
}
Ngoài 2 cách trên còn có thể dùng hàm compareTo của lớp String, tuy nhiên cách này ít phổ biến. Nếu hai chuỗi giống nhau hàm compareTo sẽ trả về 0. Cách này cũng phân biệt chữ in hoa và thường.
String string1 = "Sinh Vien CNTT";Lựa chọn 4: So sánh chuỗi trong Java với phương thức: compareToIgnoreCase
String string2 = "sinh vien cntt";
if (string1.compareTo(string2) == 0)
{
// Dòng này không sẽ được in ra vì hai chuỗi không bằng nhau
System.out.println("Hai chuỗi bằng nhau.");
}
Cách này không phân biệt in hoa và in thường
String string1 = "Sinh Vien CNTT";Vì không nên sao sử dụng toán tử == trong so sánh chuỗi Java: Vì == là so sánh địa chỉ 2 đối tượng, còn equals là so sánh giá trị, nên trong trường hợp dưới đây dùng == sẽ không đúng.
String string2 = "sinh vien cntt";
if (string1.compareTo(string2) == 0)
{
// Dòng này sẽ được in ra vì hai chuỗi bằng nhau
System.out.println("Hai chuỗi bằng nhau.");
}
String s = new String("231");Cảm ơn các bạn đã theo dõi bài viết, mong nhận được sự góp ý từ các bạn.
if(s == "231") {
// Dòng này sẽ không được in ra màn hình
System.out.println("Phuong phap dung ==");
}
if(s.equals("231")) {
// Dòng này sẽ được in ra màn hình
System.out.println("Phuong phap dung equals");
}
Xem tất cả các bài viết về Java String: Vào Đây
Sign up here with your email
ConversionConversion EmoticonEmoticon