Heim > Java > javaLernprogramm > Java Sortieren alphanumerische Strings Beispiel

Java Sortieren alphanumerische Strings Beispiel

James Robert Taylor
Freigeben: 2025-03-07 17:28:25
Original
1031 Leute haben es durchsucht

Java -Sortieren alphanumerische Zeichenfolgen Beispiel

Dieses Beispiel zeigt, dass die Sortierung einer Liste alphanumerischer Zeichenfolgen in Java mit einem benutzerdefinierten Komparator sortiert wird. Wir werden eine List von Strings und die Collections.sort() -Methode verwenden, mit der wir eine benutzerdefinierte Sortierlogik angeben können. Die integrierte

-Methode verwendet eine stark optimierte Zusammenführungsart, die in den durchschnittlichen und schlimmsten Fällen o (n log n) Zeitkomplexität liefert. Die Effizienz hängt jedoch stark von dem von Ihnen bereitgestellten
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class AlphanumericSort {

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("apple1");
        strings.add("apple10");
        strings.add("apple2");
        strings.add("banana1");
        strings.add("banana20");
        strings.add("banana10");
        strings.add("apple");


        // Sort using a custom comparator
        Collections.sort(strings, new AlphanumericComparator());

        System.out.println("Sorted strings:");
        for (String str : strings) {
            System.out.println(str);
        }
    }

    static class AlphanumericComparator implements Comparator<String> {
        @Override
        public int compare(String s1, String s2) {
            int i = 0;
            while (i < s1.length() && i < s2.length()) {
                char c1 = s1.charAt(i);
                char c2 = s2.charAt(i);

                if (Character.isDigit(c1) && Character.isDigit(c2)) {
                    int num1 = 0;
                    int num2 = 0;
                    while (i < s1.length() && Character.isDigit(s1.charAt(i))) {
                        num1 = num1 * 10 + (s1.charAt(i) - '0');
                        i++;
                    }
                    while (i < s2.length() && Character.isDigit(s2.charAt(i))) {
                        num2 = num2 * 10 + (s2.charAt(i) - '0');
                        i++;
                    }
                    return Integer.compare(num1, num2);
                } else if (Character.isDigit(c1)) {
                    return 1; // Digits come after letters
                } else if (Character.isDigit(c2)) {
                    return -1; // Digits come after letters
                } else if (c1 != c2) {
                    return c1 - c2; // Compare characters
                } else {
                    i++;
                }
            }
            return s1.length() - s2.length(); // Compare lengths if prefixes are equal

        }
    }
}
Nach dem Login kopieren
ab. Daher müssen Sie eine benutzerdefinierte

implementieren, die die alphanumerische Natur der Saiten korrekt behandelt. Das obige Beispiel zeigt einen solchen Komparator. Dieser Komparator analysiert die Saiten, trennt die alphabetischen und numerischen Teile und vergleicht sie entsprechend. Dieser Ansatz vermeidet unnötige String -Conversions oder externe Bibliotheken, was zu einer effizienten Sortierung führt.
  • lexikografische Ordnung: Die Standard -String -Vergleich behandelt Zahlen lexikografisch. Dies bedeutet, dass "10" als "2" als "2" angesehen wird, was für die alphanumerische Sortierung falsch ist. Verwenden Sie immer einen benutzerdefinierten Comparator, um numerische Teile als Zahlen und nicht als Zeichenfolgen zu behandeln. Es muss zuerst die alphabetischen Teile und dann die numerischen Teile vergleichen, um die korrekte Bestellung zu gewährleisten. Führende Nullen sollten die Sortierreihenfolge nicht beeinflussen. Vermeiden Sie unnötige String -Manipulationen oder -konvertierungen innerhalb der Vergleichslogik. Das obige Beispiel zeigt einen effizienten Ansatz, der den Overhead minimiert. Erwägen Sie, Überprüfungen für
  • Werte hinzuzufügen und sie angemessen zu behandeln. Bibliotheken wie Apache Commons Lang bieten Dienstprogramme an, die möglicherweise bei der Manipulation von String-Manipulationen (z. B. numerische Teile extrahieren) beitragen, aber sie bieten keinen fertigen alphanumerischen Sortierer. Das Erstellen eines benutzerdefinierten
  • ist im Allgemeinen der effizienteste und direkteste Ansatz für diese Aufgabe, da Sie die Sortierlogik genau steuern können, um Ihre spezifischen Anforderungen zu erfüllen. Die Verwendung externer Bibliotheken kann unnötige Overheads und Abhängigkeiten hinzufügen.

Das obige ist der detaillierte Inhalt vonJava Sortieren alphanumerische Strings Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage