Comparaison des chaînes par ordre alphabétique


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

Je veux comparer les deux chaînes ci-dessus par leur ordre alphabétique (qui dans ce cas "Projet" puis "Sunject" comme "P" vient avant "S"). Est-ce que quelqu'un sait comment faire cela en Java?

Réponses:


121

String.compareTo pourrait ou non être ce dont vous avez besoin.

Jetez un œil à ce lien si vous avez besoin d'un ordre localisé des chaînes.


8
Notez que String#compareTola comparaison lexicographique de s triera les majuscules "Z" avant les minuscules "a". Si vous classez par ordre alphabétique des chaînes à casse mixte, vous avez besoin d'un ordre sensible aux paramètres régionaux. Au cas où le lien vers l'ordre localisé des chaînes disparaît, la chose à utiliser est java.text.Collator .
marqueurs duelin

41
Vous pouvez également utiliserString#compareToIgnoreCase
Dori

1
Vous devez également faire face à la lettre accentuée voir stackoverflow.com/a/12927962/2087666
Remi Morin

94

Jetez un œil à la String.compareTométhode.

s1.compareTo(s2)

À partir des javadocs:

Le résultat est un entier négatif si cet objet String précède lexicographiquement la chaîne d'argument. Le résultat est un entier positif si cet objet String suit lexicographiquement la chaîne d'argument. Le résultat est zéro si les chaînes sont égales; compareTo renvoie 0 exactement lorsque la méthode equals (Object) renvoie 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

Vous pouvez appeler la méthode compareTo de l'une ou l'autre des chaînes (java.lang.String.compareTo). Cette fonctionnalité est bien documentée sur le site de documentation java .

Voici un petit programme qui le démontre:

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

Voici une démonstration en direct qui montre que cela fonctionne: http://ideone.com/Drikp3


6

Pour l'ordre alphabétique après la nationalisation, utilisez 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");
}

Pour une liste des paramètres régionaux pris en charge, consultez Paramètres régionaux pris en charge par JDK 8 et 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

Comme d'autres l'ont suggéré, vous pouvez utiliser String.compareTo(String).

Mais si vous triez une liste de chaînes et que vous avez besoin d'un Comparator, vous n'avez pas à l'implémenter, vous pouvez utiliser Comparator.naturalOrder()ou Comparator.reverseOrder().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.