So sánh các chuỗi theo thứ tự bảng chữ cái của chúng


101
String s1 = "Project";
String s2 = "Sunject";

Tôi muốn so sánh hai chuỗi trên theo thứ tự chữ cái của chúng (trong trường hợp này là "Dự án" thì "Sunject" là "P" đứng trước "S"). Có ai biết làm thế nào để làm điều đó trong Java?

Câu trả lời:


121

String.compareTo có thể có hoặc không phải là những gì bạn cần.

Hãy xem liên kết này nếu bạn cần sắp xếp bản địa hóa các chuỗi.


8
Lưu ý rằng phép String#compareToso sánh từ vựng sẽ sắp xếp chữ "Z" trước chữ thường "a". Nếu bạn đang sắp xếp theo thứ tự bảng chữ cái các chuỗi chữ hoa-thường, bạn cần sắp xếp theo ngôn ngữ địa phương. Trong trường hợp liên kết đến thứ tự bản địa hóa của các chuỗi bị chết, thứ cần sử dụng là java.text.Collator .
đánh dấu duelin

41
Bạn cũng có thể sử dụngString#compareToIgnoreCase
Dori

1
Bạn cũng phải đối phó với accentued thư see stackoverflow.com/a/12927962/2087666
Remi Morin

94

Hãy xem String.compareTophương pháp.

s1.compareTo(s2)

Từ javadocs:

Kết quả là một số nguyên âm nếu đối tượng Chuỗi này về mặt từ vựng đứng trước chuỗi đối số. Kết quả là một số nguyên dương nếu đối tượng Chuỗi này theo từ điển học theo chuỗi đối số. Kết quả là 0 nếu các chuỗi bằng nhau; CompareTo trả về 0 chính xác khi phương thức equals (Object) trả về true.


33
String a = "..."; 
String b = "...";  

int compare = a.compareTo(b);  

if (compare < 0) {  
    //a is smaller
}
else if (compare > 0) {
    //a is larger 
}
else {  
    //a is equal to b
} 

7

Bạn có thể gọi phương thức CompareTo của chuỗi (java.lang.String.compareTo). Tính năng này được ghi lại trên trang web tài liệu java .

Đây là một chương trình ngắn chứng minh điều đó:

class StringCompareExample {
    public static void main(String args[]){
        String s1 = "Project"; String s2 = "Sunject";
        verboseCompare(s1, s2);
        verboseCompare(s2, s1);
        verboseCompare(s1, s1);
    }

    public static void verboseCompare(String s1, String s2){
        System.out.println("Comparing \"" + s1 + "\" to \"" + s2 + "\"...");

        int comparisonResult = s1.compareTo(s2);
        System.out.println("The result of the comparison was " + comparisonResult);

        System.out.print("This means that \"" + s1 + "\" ");
        if(comparisonResult < 0){
            System.out.println("lexicographically precedes \"" + s2 + "\".");
        }else if(comparisonResult > 0){
            System.out.println("lexicographically follows \"" + s2 + "\".");
        }else{
            System.out.println("equals \"" + s2 + "\".");
        }
        System.out.println();
    }
}

Đây là một minh chứng trực tiếp cho thấy nó hoạt động: http://ideone.com/Drikp3


6

Đối với thứ tự bảng chữ cái sau khi quốc gia hóa, hãy sử dụng Collator.

//Get the Collator for US English and set its strength to PRIMARY
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
if( usCollator.compare("abc", "ABC") == 0 ) {
    System.out.println("Strings are equivalent");
}

Để biết danh sách các ngôn ngữ được hỗ trợ, hãy xem JDK 8 và JRE 8 Các ngôn ngữ được hỗ trợ .


1
import java.io.*;
import java.util.*;
public class CandidateCode {
    public static void main(String args[] ) throws Exception {
       Scanner sc = new Scanner(System.in);
           int n =Integer.parseInt(sc.nextLine());
           String arr[] = new String[n];
        for (int i = 0; i < arr.length; i++) {
                arr[i] = sc.nextLine();
                }


         for(int i = 0; i <arr.length; ++i) {
            for (int j = i + 1; j <arr.length; ++j) {
                if (arr[i].compareTo(arr[j]) > 0) {
                    String temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for(int i = 0; i <arr.length; i++) {
            System.out.println(arr[i]);
        }
   }
}

0

Như những người khác đề xuất, bạn có thể sử dụng String.compareTo(String).

Nhưng nếu bạn đang sắp xếp một danh sách các Chuỗi và bạn cần một Comparator, bạn không cần phải triển khai nó, bạn có thể sử dụng Comparator.naturalOrder()hoặc Comparator.reverseOrder().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.