Membandingkan string berdasarkan urutan abjadnya


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

Saya ingin membandingkan dua string di atas dengan urutan abjad mereka (yang dalam hal ini "Proyek" kemudian "Sunject" sebagai "P" muncul sebelum "S"). Adakah yang tahu bagaimana melakukan itu di Jawa?

Jawaban:


121

String.compareTo mungkin atau mungkin tidak yang Anda butuhkan.

Lihat tautan ini jika Anda membutuhkan urutan string yang dilokalkan.


8
Perhatikan bahwa String#compareToperbandingan leksikografik akan mengurutkan huruf besar "Z" sebelum huruf kecil "a." Jika Anda menyusun string dengan huruf campuran sesuai abjad, Anda memerlukan pengurutan yang peka-lokal. Jika tautan ke pengurutan string yang dilokalkan mati, hal yang akan digunakan adalah java.text.Collator .
penanda duelin

41
Anda juga dapat menggunakanString#compareToIgnoreCase
Dori

1
Anda juga harus berurusan dengan huruf beraksen lihat stackoverflow.com/a/12927962/2087666
Remi Morin

94

Lihatlah String.compareTometodenya.

s1.compareTo(s2)

Dari javadocs:

Hasilnya adalah bilangan bulat negatif jika objek String ini secara leksikografis mendahului string argumen. Hasilnya adalah bilangan bulat positif jika objek String ini secara leksikografis mengikuti string argumen. Hasilnya nol jika string sama; bandingkanTo mengembalikan 0 tepat ketika metode sama dengan (Objek) akan mengembalikan nilai 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

Anda dapat memanggil metode bandingkanTo string (java.lang.String.compareTo). Fitur ini didokumentasikan dengan baik di situs dokumentasi java .

Berikut adalah program singkat yang mendemonstrasikannya:

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();
    }
}

Berikut adalah demonstrasi langsung yang menunjukkan cara kerjanya: http://ideone.com/Drikp3


6

Untuk urutan abjad setelah nasionalisasi, gunakan 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");
}

Untuk daftar lokal yang didukung, lihat JDK 8 dan JRE 8 Lokal yang Didukung .


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

Seperti yang disarankan orang lain, Anda dapat menggunakan String.compareTo(String).

Tetapi jika Anda mengurutkan daftar String dan membutuhkan Comparator, Anda tidak harus menerapkannya, Anda dapat menggunakan Comparator.naturalOrder()atau Comparator.reverseOrder().

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.