Cách so sánh hai chuỗi trong Java

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 Java, bạ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 chuỗi từ Javagói .lang.
  • Lớp đối tượng từ Javagói .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 này. Trong này Java hướng dẫn, bạn sẽ học những phương pháp 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()

Sản phẩm 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.

Chú thích: Sử dụng phương thức chuỗi bằng để so sánh chuỗi 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 với các giá trị chuỗi khác nhau.

Cách 2: Phương thức đối tượng bằng()

Sản phẩm 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 đầu ra là giá trị boolean là true vì các chuỗi được so sánh bằng nhau.

Cách 3: Phương thức so sánh chuỗiTo()

Sản phẩm 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 0 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 các trường hợp, bạn có thể sử dụng phương thức “compareToIgnoreCase”.

Phương pháp 4: Phương thức StringUtils bằng()

Sản phẩm Java StringUtils bằng() phương pháp so sánh sự bằng nhau của hai chuỗi ký tự.

Đả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ác phương thức StringUtil.

Đố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ụ xây dựng nào, hãy sử dụng công cụ này hướng dẫn.

Cú pháp:

public static boolean equals(CharSequnce 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 so sánh chuỗi bằng nhau. Nó áp dụng nếu bạn chuyển một giá trị null trong 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()

Sản phẩm 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 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 nếu cả hai đối số đều rỗng.
  • 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 sẽ được thêm vào cùng một nhóm chuỗi do đó chuỗi có 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 đó đầu ra là sai.

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.

Tóm tắt:

Sản phẩm Java Phương pháp so sánh hai chuỗi được sử dụng phụ thuộc vào các yếu tố sau.

  • Mong muốn có quyền kiểm soát phương pháp của bạn. Trong trường hợp này, hãy tạo một phương thức tùy chỉnh.
  • Bạn không thể sử dụng mã Legacy. với Java 6 và thấp hơn.
  • Phương pháp có hiệu suất tối ưu.
  • Loại dữ liệu bạn đang làm việc. Ví dụ: khớp một chuỗi từ một tập hợp các đối số biến.
  • Các tính năng được cung cấp bởi thư viện thuê ngoài. Ví dụ: thư viện StringUtils cung cấp các phương thức khác nhau để so sánh các chuỗi.