Vergleichen von Zeichenfolgen nach ihrer alphabetischen Reihenfolge

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

Ich möchte die beiden obigen Zeichenfolgen nach ihrer alphabetischen Reihenfolge vergleichen (in diesem Fall steht "Projekt" und dann "Sunject" als "P" vor "S"). Weiß jemand, wie man das in Java macht?

Makky
quelle

Antworten:

121

String.compareTo könnte oder könnte nicht das sein, was Sie brauchen.

Schauen Sie sich diesen Link an, wenn Sie eine lokalisierte Reihenfolge der Zeichenfolgen benötigen.

Buhb
quelle
8
Beachten Sie, dass String#compareTobeim lexikografischen Vergleich das Großbuchstaben "Z" vor dem Kleinbuchstaben "a" sortiert wird. Wenn Sie Zeichenfolgen in Groß- und Kleinschreibung alphabetisieren, benötigen Sie eine länderspezifische Reihenfolge. Für den Fall, dass der Link zur lokalisierten Reihenfolge von Zeichenfolgen unterbrochen wird, ist java.text.Collator zu verwenden .
Duelin Marker
41
Sie können auch verwendenString#compareToIgnoreCase
Dori
1
Sie müssen sich auch mit akzentuierten Buchstaben befassen, siehe stackoverflow.com/a/12927962/2087666
Remi Morin
94

Schauen Sie sich die String.compareToMethode an.

s1.compareTo(s2)

Aus den Javadocs:

Das Ergebnis ist eine negative Ganzzahl, wenn dieses String-Objekt lexikografisch vor dem Argument string steht. Das Ergebnis ist eine positive Ganzzahl, wenn dieses String-Objekt lexikografisch dem Argument string folgt. Das Ergebnis ist Null, wenn die Zeichenfolgen gleich sind. compareTo gibt 0 genau dann zurück, wenn die Methode equals (Object) true zurückgeben würde.

Dogbane
quelle
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
} 
mdaguerre
quelle
7

Sie können die compareTo-Methode beider Zeichenfolgen (java.lang.String.compareTo) aufrufen. Diese Funktion ist auf der Java-Dokumentationsseite gut dokumentiert .

Hier ist ein kurzes Programm, das es demonstriert:

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

Hier ist eine Live-Demonstration, die zeigt, dass es funktioniert: http://ideone.com/Drikp3

Vasiliy Sharapov
quelle
6

Verwenden Sie für die alphabetische Reihenfolge nach der Verstaatlichung 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");
}

Eine Liste der unterstützten Gebietsschemas finden Sie unter JDK 8 und JRE 8 Unterstützte Gebietsschemas .

Ondra Žižka
quelle
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]);
        }
   }
}
Malik Arman
quelle
0

Wie andere vorgeschlagen haben, können Sie verwenden String.compareTo(String).

Wenn Sie jedoch eine Liste von Zeichenfolgen sortieren und eine benötigen Comparator, müssen Sie diese nicht implementieren, sondern können Comparator.naturalOrder()oder verwenden Comparator.reverseOrder().

Arenaq
quelle