Confronto delle stringhe in base al loro ordine alfabetico


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

Voglio confrontare le due stringhe precedenti in base al loro ordine alfabetico (che in questo caso "Progetto" poi "Sunject" come "P" viene prima di "S"). Qualcuno sa come farlo in Java?

Risposte:


121

String.compareTo potrebbe o non potrebbe essere ciò di cui hai bisogno.

Dai un'occhiata a questo link se hai bisogno di un ordinamento localizzato delle stringhe.


8
Si noti che String#compareToil confronto lessicografico di ordinerà la "Z" maiuscola prima della "a" minuscola. Se stai alfabetizzando stringhe con maiuscole e minuscole, hai bisogno di un ordinamento sensibile alle impostazioni internazionali. Nel caso in cui il collegamento all'ordinamento localizzato delle stringhe si interrompa , la cosa da usare è java.text.Collator .
marcatori duello

41
Puoi anche usareString#compareToIgnoreCase
Dori

1
Hai anche a che fare con accentued lettera See stackoverflow.com/a/12927962/2087666
Remi Morin

94

Dai un'occhiata al String.compareTometodo.

s1.compareTo(s2)

Dai javadoc:

Il risultato è un numero intero negativo se questo oggetto String precede lessicograficamente l'argomento stringa. Il risultato è un numero intero positivo se questo oggetto String segue lessicograficamente l'argomento stringa. Il risultato è zero se le stringhe sono uguali; compareTo restituisce 0 esattamente quando il metodo equals (Object) restituisce 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

È possibile chiamare il metodo compareTo di entrambe le stringhe (java.lang.String.compareTo). Questa caratteristica è ben documentata sul sito di documentazione java .

Ecco un breve programma che lo dimostra:

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

Ecco una dimostrazione dal vivo che mostra che funziona: http://ideone.com/Drikp3


6

Per l'ordine alfabetico dopo la nazionalizzazione, utilizzare 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");
}

Per un elenco delle versioni locali supportate, vedere Impostazioni internazionali supportate da JDK 8 e JRE 8 .


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

Come altri hanno suggerito, puoi usare String.compareTo(String) .

Ma se stai ordinando un elenco di stringhe e hai bisogno di un Comparator, non devi implementarlo, puoi usare Comparator.naturalOrder()o Comparator.reverseOrder().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.