So sánh chuỗi không phân biệt hoa thường java năm 2024

String là một chuỗi các ký tự trong Java, nó là các imutable object nghĩa là chúng ta sẽ không thể thay đổi sau khi khởi tạo. Để so sánh 2 chuỗi trong Java chúng ta có các cách sau

Tự định nghĩa

Đây là phương án hay nếu bạn là người mới bắt đầu học lập trình cũng như ngôn ngữ Java. Cách so sánh được mô tả như sau:

  1. Nếu (string1 > string2) trả về 1.
  2. Nếu cả 2 bằng nhau i.e.(string1 == string2) trả về 0.
  3. Nếu (string1 < string2) trả về -1.
class GFG {
// This method compares two strings
// lexicographically without using
// library functions
public static int stringCompare(String str1, String str2) {
    int l1 = str1.length();
    int l2 = str2.length();
    int lmin = Math.min(l1, l2);
    for (int i = 0; i < lmin; i++) {
        int str1_ch = (int) str1.charAt(i);
        int str2_ch = (int) str2.charAt(i);
        if (str1_ch != str2_ch) {
            return str1_ch - str2_ch;
        }
    }
    if (l1 != l2) {
        return l1 - l2;
    }
    // If none of the above conditions is true,
    // it implies both the strings are equal
    else {
        return 0;
    }
}
// Driver function to test the above program
public static void main(String args[]) {
    String string1 = new String("Deft");
    String string2 = new String("Practice");
    String string3 = new String("Blog");
    String string4 = new String("Blog");
    System.out.println("Comparing " + string1 + " and " + string2
  • " : " + stringCompare(string1, string2));
        System.out.println("Comparing " + string3 + " and " + string4
  • " : " + stringCompare(string3, string4)); System.out.println("Comparing " + string1 + " and " + string4
  • " : " + stringCompare(string1, string4)); } }

Output

Comparing Deft and Practice : -12 Comparing Blog and Blog : 0 Comparing Deft and Blog : 2

Sử dụng String.equals()

Hàm String.equals() được sử dụng để so sánh bằng 2 string với nhau. Nếu nội dung của 2 chuỗi giống nhau thì nó sẽ trả về TRUE ngược lại FALSE.

class GFG {
public static void main(String args[])
{
    String string1 = new String("Deft");
    String string2 = new String("Practice");
    String string3 = new String("Blog");
    String string4 = new String("Blog");
    String string5 = new String("Blog");
    System.out.println("Comparing " + string1 + " and " + string2
  • " : " + string1.equals(string2));
        System.out.println("Comparing " + string3 + " and " + string4
  • " : " + string3.equals(string4)); System.out.println("Comparing " + string4 + " and " + string5
  • " : " + string4.equals(string5)); System.out.println("Comparing " + string1 + " and " + string4
  • " : " + string1.equals(string4)); } }

Output

Comparing Deft and Practice : false Comparing Blog and Blog : true Comparing Blog and Blog : true Comparing Deft and Blog : false

Sử dụng String.equalsIgnoreCase()

Hàm String.equalsIgnoreCase() được sử dụng để so sánh bằng 2 string với nhau, nó khác với String.equalsIgnoreCase() là nó không phân biệt chữ hoa thường.

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.