So sánh với Python

Java có một giao diện được gọi là Có thể so sánh, chứa phương thức so sánhTo (). Bất kỳ lớp nào triển khai giao diện So sánh đều phải ghi đè phương thức so sánh

Java. lang thang. Lớp String chứa phương thức compareTo(). Phương pháp này được sử dụng để so sánh hai chuỗi theo từ điển (i. e. theo thứ tự bảng chữ cái, ví dụ, b lớn hơn a). Nó so sánh hai Chuỗi và trả về một số âm hoặc số dương hoặc số không

Cú pháp so sánhTo()

compareTo() trong Java được gọi bằng cách sử dụng một Đối tượng và lấy một Đối tượng khác cùng loại làm đối số. Nó trả về một số nguyên dương, số nguyên âm hoặc số không. Nó có các triển khai khác nhau cho các lớp khác nhau. Chữ ký cho phương thức chấp nhận tham số kiểu Chuỗi và so sánh nó với chuỗi hiện tại được đưa ra bên dưới

public int compareTo(String string2)

Và cú pháp của nó sẽ là

string1.compareTo(string2);

Chúng ta sẽ thảo luận về các triển khai khác của compareTo() ở phần sau của bài viết này

Các tham số so sánh ()

compareTo() trong java chỉ lấy một Đối tượng duy nhất làm tham số để so sánh với

obj1.compareTo(Object obj2);

Ghi chú

obj1 và obj2 phải thuộc cùng một lớp và lớp của chúng phải triển khai giao diện So sánh được

giá trị trả về so sánh ()

Loại trả lại. Hoàn thành

so sánhTo () trong java trả về một giá trị số nguyên. Nó trả về một số nguyên dương nếu chuỗi1 lớn hơn chuỗi2 về mặt từ điển, âm nếu chuỗi2 lớn hơn chuỗi1 và 0 nếu cả hai bằng nhau

int difference = string1.compareTo(string2);

ngoại lệ

Hàm so sánh () trong java đưa ra hai Ngoại lệ. Hai ngoại lệ này là ClassCastException và NullPulumException

ClassCastException

Nếu chúng ta cố gắng so sánh hai Đối tượng có kiểu dữ liệu khác nhau, thì ClassCastException sẽ bị ném

Ví dụ. chúng tôi cố gắng so sánh Chuỗi và ArrayList, vì vậy chúng tôi nhận được ClassCastException

Hãy để chúng tôi lấy một ví dụ trong đó chúng tôi cố gắng so sánh hai đối tượng có kiểu dữ liệu khác nhau

public class CompareString {
    public static void main(String[] args){
        String first = new String("Good evening");
        StringBuffer second = new StringBuffer("Good Night");
        // ClassCastExcpetion
        System.out.println(first.compareTo(second));
        // No Exception
        System.out.println(first.compareTo(second.toString()));
    }
}

Trong ví dụ trên, như chúng ta biết StringBuffer và String không thể so sánh được vì chúng thuộc các kiểu dữ liệu khác nhau, phương thức so sánh sẽ ném ClassCastException. Nhưng chúng ta có thể chuyển đổi StringBuffer thành String bằng phương thức toString();

NullPulumException

compareTo() trong java ném NullPulumException nếu chúng ta cố gắng so sánh một đối tượng với một đối tượng null khác

Hãy xem ví dụ bên dưới, chúng tôi đang khởi tạo một trong các Chuỗi là null và chúng tôi cố gắng so sánh hai chuỗi

public class CompareString {
    public static void main(String[] args){
        //null string
        String first = null;
        String second = "Good Night";
        // try comparing
        try{
            System.out.println(first.compareTo(second));
        }catch(Exception e){
            // printing the exception and its cause
            e.printStackTrace();
        }
    }
}

đầu ra

So sánh với Python

Khi chúng tôi thử so sánh một chuỗi null với một chuỗi không trống khác, chúng tôi thấy rằng nó ném ra một NullPulumException

Phương thức so sánh () trong Java là gì

Java có một giao diện được gọi là Có thể so sánh, chứa phương thức so sánhTo (). Bất kỳ lớp nào triển khai giao diện So sánh đều phải ghi đè phương thức so sánh

Java. lang thang. Lớp String chứa phương thức so sánh. Phương pháp này được sử dụng để so sánh hai chuỗi từ điển. Nó so sánh hai Chuỗi và trả về một số âm, số dương hoặc số không. Nó sẽ so sánh từng ký tự một. Nếu các ký tự của chuỗi bằng nhau, nó sẽ chuyển sang ký tự tiếp theo của cả hai chuỗi

Nếu tất cả các ký tự của chuỗi bằng nhau, nó sẽ trả về 0. Nếu ở bất kỳ vị trí nào các ký tự không giống nhau, nó sẽ trả về sự khác biệt trong Unicode (ASCII) của các ký tự khác nhau đầu tiên, i. e. Chuỗi1. charAt(i)-String2. charAt(i);

Ví dụ

Hãy để chúng tôi lấy hai chuỗi để hiểu cách hoạt động của phương thức so sánh bên trong

Đặt string1 = "PRIYA" và string2 = "PRISHA". P, R và I bằng nhau trong cả hai chuỗi, ký tự không khớp đầu tiên xảy ra ở chỉ mục 333. Unicode của YYY là 595959 lớn hơn SSS với Unicode 535353. Vì vậy, nó sẽ trả về một số dương. Bây giờ sự khác biệt của Unicodes của YYY và SSS là 666, vì vậy đầu ra là 6

So sánh với Python
So sánh với Python

Hãy để chúng tôi xem mã cho cùng

public class CompareString {
    public static void main(String[] args){
        String string1 = "PRIYA";
        String string2 = "PRISHA";
        // printing result of comparison
        System.out.println(string1.compareTo(string2));
    }
}

đầu ra

Như chúng ta đã biết ký tự YYY xuất hiện sau SSS trong từ điển, nó trả về một số dương. Do đó, chúng tôi nhận được 666 làm đầu ra

Lưu ý. nếu string1 > string2, nó trả về số dương
nếu string1 < string2, nó trả về số âm
if string1 == string2, nó trả về 0

Ba biến thể của phương thức compareTo() trong Java

Các phương thức so sánh có ba loại, một loại lấy một đối tượng làm tham số, loại kia lấy Chuỗi làm tham số và loại thứ ba thực hiện so sánh Chuỗi bỏ qua các khác biệt về chữ hoa chữ thường

Đối tượng Java so sánh với (Đối tượng khácObj)

Tất cả các lớp triển khai giao diện So sánh phải ghi đè phương thức so sánh vì đây là phương thức hợp đồng của giao diện. compareTo trong java lấy một đối tượng của lớp này làm tham số và chúng ta có thể định nghĩa phương thức này để so sánh hai đối tượng theo thứ tự sắp xếp

Chúng ta hãy định nghĩa một lớp Book đơn giản thực hiện một giao diện có thể so sánh được, lưu trữ các chi tiết như tên sách, tác giả, v.v. , trong đối tượng của nó và ghi đè phương thức so sánh. Chúng tôi so sánh hai cuốn sách theo năm xuất bản của họ. Nếu một cuốn sách được xuất bản sau một cuốn sách khác, nó sẽ trả về 1, nếu cuốn sách được phát hành trước một cuốn sách khác, nó sẽ trả về -1 và nếu cả hai cuốn sách được phát hành trong cùng một năm, nó sẽ trả về 0

public class Book implements Comparable{
    
    // parameters of a book
    String book_name;
    String author;
    int year;
    
    // constructor method to store different values
    public Book(String book_name, String author, int year){
        this.book_name=book_name;
        this.author = author;
        this.year = year;
    }
    
    // compareTo() method
    @Override
    public int compareTo(Book anotherBook) {
        if(this.year > anotherBook.year) return 1;
        else if(this.year == anotherBook.year) return 0;
        else return -1;
    }

    public static void main(String[] args){ 
        // Objects of Book class
        Book Java = new Book("Learn Java Quickly", "John Tomlinson", 2001);
        Book Kotlin = new Book("Kotlin for Beginners", "B. G. Taylor", 2020);
        Book Python = new Book("Python is Fun", "Jessica Hu", 2005);

        // to check if Java's book was released after Python's Book
        System.out.println(Java.compareTo(Python));
    }
}

đầu ra

  • Sách lớp trên, triển khai giao diện So sánh. Nó là chung chung, chúng ta có thể thực hiện nó với bất kỳ loại đối tượng nào. Ở đây chúng tôi sử dụng các đối tượng của loại Sách
  • Book có 3 tham số là book_name, author và year (năm xuất bản sách)
  • Phương thức khởi tạo lấy tất cả ba tham số và lưu trữ chúng trong một đối tượng của lớp Book
  • Trong phương thức chính, chúng tôi tạo ba đối tượng Sách là Java, Kotlin và Python và chúng tôi chỉ định các tham số của nó
  • Bây giờ chúng ta thử so sánh hai đối tượng Java Book và Python Book. Như chúng ta đã biết Java Book (2001) không được phát hành sau Python Book (2005), nó trả về -1

So sánh chuỗi Java (Chuỗi chuỗi2)

Lớp String trong Java định nghĩa phương thức so sánh để so sánh hai chuỗi theo từ điển i. e. theo thứ tự từ điển. Nếu một chuỗi 1 đứng trước chuỗi 2, nó trả về -1, nếu chuỗi 1 đứng sau chuỗi 2, nó trả về 1 và nếu cả hai chuỗi bằng nhau, nó trả về 0

So sánh với một chuỗi rỗng

Nó khác khi chúng ta khởi tạo một chuỗi rỗng và khi chúng ta gọi nó là null. Một chuỗi trống không đưa ra một ngoại lệ và trỏ đến một chuỗi có độ dài 0 hoặc không có ký tự nào, trong khi một chuỗi null không trỏ đến gì (giá trị rác) và đưa ra một ngoại lệ. Vì vậy, phương thức so sánh cũng phải có một đầu ra khác cho các chuỗi rỗng và rỗng

Hãy để chúng tôi lấy một ví dụ để hiểu điều gì xảy ra khi chúng ta so sánh một chuỗi rỗng với một chuỗi không trống khác. Chúng tôi sẽ lấy ba chuỗi, trong đó một chuỗi sẽ trống và hai chuỗi còn lại có độ dài khác nhau

________số 8

đầu ra

Trong ví dụ trên, khi chúng ta so sánh một chuỗi rỗng với một chuỗi không rỗng, nó sẽ trả về một số âm không có gì khác ngoài độ dài của chuỗi không rỗng

Ngược lại, khi chúng ta so sánh chuỗi không trống với chuỗi trống, chúng ta sẽ nhận được một số dương bằng độ dài của chuỗi không trống

Do đó, bằng cách sử dụng hàm compareTo() trong Java, chúng ta có thể tìm độ dài của chuỗi bằng cách so sánh với một chuỗi rỗng vì nó trả về độ dài của chuỗi không trống với các dấu dương và âm theo vị trí của chuỗi không trống

compareTo() có phân biệt chữ hoa chữ thường không?

Phân biệt chữ hoa chữ thường là nơi các ký tự chữ hoa và chữ thường khác nhau. Ví dụ: 'a' và 'A' không giống nhau trong trường hợp phân biệt chữ hoa chữ thường. Phương thức so sánh sử dụng Unicode của từng ký tự trong cả hai chuỗi để so sánh. Ngoài ra, Unicode của chữ thường và chữ hoa là khác nhau. Do đó, phương thức so sánh phân biệt chữ hoa chữ thường

Hãy xem xét trường hợp, trong đó chúng ta lấy một chuỗi Chữ hoa và cùng một chuỗi trong Chữ thường và so sánh chúng bằng phương thức so sánh

public class Main {
    public static void main(String[] args){
        String str1 = "JAVA IS FUN";
        String str2 = str1.toLowerCase();
        System.out.println("String1 : "+str1+",\tString2 : "+str2);
        System.out.println("Comparing two equal strings, one in Upper case and another in Lower case: "+str1.compareTo(str2));
    }
}

đầu ra

string1.compareTo(string2);
0

str2 bằng str1 ngoại trừ str2 viết thường. Khi chúng tôi so sánh chúng, chúng tôi nhận được đầu ra là -32. Unicode của J là 74 và j là 106. Do đó, sự khác biệt của 74-106 (J-j) là -32 và đầu ra cũng vậy

Kiểm tra xem hai chuỗi có bằng nhau không

Nếu hai chuỗi bằng nhau, phương thức so sánh () trả về 0. Chúng ta có thể sử dụng điều này để kiểm tra xem hai chuỗi có bằng nhau không. Hãy để chúng tôi lấy một ví dụ về một hình thức đăng nhập. Nếu tên người dùng và mật khẩu khớp nhau, chúng tôi nói đăng nhập thành công

string1.compareTo(string2);
1

đầu ra

string1.compareTo(string2);
2

Trong biểu mẫu đăng nhập, chúng tôi hỏi người dùng tên người dùng, so sánh tên người dùng đã nhập và chuỗi tên người dùng bằng cách sử dụng phương thức so sánh, nếu chúng bằng nhau, nó sẽ trả về 0 và điều kiện trở thành đúng. Sau đó, chúng tôi yêu cầu mật khẩu. Tương tự nếu mật khẩu khớp ta in thông báo đăng nhập thành công. Khác, chúng tôi in thông báo Tên người dùng hoặc mật khẩu không chính xác

Phương thức so sánhToIgnoreCase() giống như phương thức so sánhTo; . e. , coi chữ thường và chữ in hoa như nhau. Phương thức này không phân biệt chữ hoa chữ thường, không giống như phương thức so sánh

Xem xét một ví dụ về hai chuỗi giống nhau với các trường hợp khác nhau

string1.compareTo(string2);
3

đầu ra

Unicode của H là 74 và h là 106 nên phương thức so sánh trả về sự khác biệt của nó i. e. -32 trong khi phương thức compareToIgnoreCase() trả về 0 là h và H là bằng với nó

Sự khác biệt giữa so sánhTo và so sánh với là gì?

Cả hai đều đúng, nhưng có một sự khác biệt nhỏ về nghĩa. "So sánh với" thể hiện sự giống nhau giữa hai thứ . Ví dụ. Tôi ngần ngại so sánh tác phẩm của mình với tác phẩm của một người nào đó như Dickens. "So sánh với" gợi ý rằng sự khác biệt giữa hai điều ít nhất cũng quan trọng như những điểm tương đồng.

Hàm so sánh trả về cái gì?

Phương thức so sánhTo(). Phương thức compareTo() của lớp String trong Java so sánh chuỗi đã cho với chuỗi hiện tại theo từ điển. Nó trả về số dương, số âm hoặc 0 . Nó so sánh các chuỗi trên cơ sở giá trị Unicode của từng ký tự trong chuỗi.

so sánh có nghĩa là gì?

compareTo() được dùng để so sánh hai chuỗi theo từ điển . Mỗi ký tự của cả hai chuỗi được chuyển đổi thành một giá trị Unicode. Tuy nhiên, nếu cả hai chuỗi đều bằng nhau thì phương thức này trả về 0, ngược lại nó chỉ trả về giá trị âm hoặc dương.

Làm thế nào để so sánhTo làm việc trong sắp xếp?

Phương thức so sánhTo() . Nếu chúng tôi cố gắng chuyển một Simpson không triển khai Comparable , chúng tôi sẽ nhận được lỗi biên dịch. Phương thức sort() sử dụng tính đa hình bằng cách chuyển bất kỳ đối tượng nào có thể so sánh được. Các đối tượng sau đó sẽ được sắp xếp như mong đợi. We can only use classes that are comparable with the sort() method. If we try to pass a Simpson that does not implement Comparable , we will receive a compilation error. The sort() method uses polymorphism by passing any object that is Comparable . Objects will then be sorted as expected.