Java - So sánh chuỗi bằng câu lệnh compareTo(Comparing two Strings).


compareTo là câu lệnh được sử dụng để so sánh 2 đối đối tượng, nó sẽ trả về 0(int) nếu 2 đối tương không có sự sự khác biệt. Trả về giá trị số nào đó tuân kiểu so sánh số là đối tượng 1 sẽ lớn hơn hoặc nhỏ hơn đối tượng 2.

Trường hợp trả về số dương(+) nghĩa là đối tượng 1 lớn hơn đối tượng 2 và ngược lại trả về số âm(-) thì nghĩa là đối tượng 1 nhỏ hơn đối tượng 2.

Do việc so sánh đối tượng tương đối rắc rối, nên bài viết này chỉ giới hạn trong phạm vi là sử dụng câu lệnh compareTo để so sánh 2 chuỗi.

Ví dụ sau đây so sánh hai chuỗi bằng cách sử dụng str compareTo (string), str compareToIgnoreCase (String) và str compareTo (string đối tượng) của lớp chuỗi. Để giúp ta hiểu rõ hơn về lệnh compareTo của Java.

/**
 *
 * @author NGOCSON
 */
public class StringCompare {
    public static void main(String args[]){
       
        String str = "Hello World";
        String anotherString = "hello world";
        Object objStr = str;

        System.out.println( str.compareTo(anotherString) );
        System.out.println( anotherString.compareTo(str) );
        System.out.println( str.compareToIgnoreCase(anotherString) );
        System.out.println( str.compareTo(objStr.toString()) );
       
    }   
}

Sau đây là kết quả thực thị của ví dụ trên.

-32
32
0
0

Kế tôi sẽ giải nghĩa các câu lệnh compare đã sử dụng, có gì sai xót thì các bạn chỉnh lý nhẹ cho phát ^^!
  • str.compareTo(anotherString): Câu lệnh sẽ so sánh 2 chuỗi và trả về kết quả -32 nếu 2 chuỗi này khác nhau về mặt dữ liệu.
  • anotherString.compareTo(str): Câu lệnh này giống với câu lệnh trên, tôi chỉ đảo ngược lại so sánh để minh họa rõ hơn về cách so sánh của hàm compareTo.
  • str.compareToIgnoreCase(anotherString): Ca6nh lệnh này sẽ so sánh 2 chuỗi mà không biệt chữ hoa hay chữ thường vì vậy kết quả nó sẽ trả về 0(không có sự khác biệt).
  • str.compareTo(objStr.toString()): Câu lện này đặc biệt là sử dụng tham số "objStr.toString()" thì ở đây nó sẽ hiểu là so sánh kiểu đổi tượng, và do cả hai chuỗi đều có kiểu dữ liệu là String nên nó trả về kết quả lả 0(không có sự khác biệt).














1 comment: