[Java String] So Sánh Hai Chuỗi Trong Java

Xem tất cả các bài viết về Java String: Vào Đây

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";
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.")
}
 
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 string1 = "Sinh Vien CNTT";
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.");
}
 
Lựa chọn 2: So sánh chuỗi trong Java với phương thức: equalsIgnoreCase

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";
String string2 = "sinh vien cntt";
 
if (string1.equalsIgnoreCase(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.");
}
 
Lựa chọn 3: So sánh chuỗi trong Java với phương thức: compareTo

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";
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.");
}
 
Lựa chọn 4: So sánh chuỗi trong Java với phương thức: compareToIgnoreCase

Cách này không phân biệt in hoa và in thường

String string1 = "Sinh Vien CNTT";
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.");
}
 
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 s = new String("231");
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");
} 
 
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.

Xem tất cả các bài viết về Java String: Vào Đây
Older Post
«
Newer Post
»

3 comments:

  1. cám ơn bạn bài viết rất hay.

    ReplyDelete
  2. Lựa chọn 2: So sánh chuỗi trong Java với phương thức: equalsIgnoreCase
    Code sai kia Ban oi

    ReplyDelete