Heim  >  Artikel  >  Java  >  Wie implementiert man einen String-Vergleich mit natürlicher Sortierreihenfolge in Java?

Wie implementiert man einen String-Vergleich mit natürlicher Sortierreihenfolge in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 18:30:03301Durchsuche

How to Implement Natural Sort Order String Comparison in Java?

Vergleich natürlicher Sortierreihenfolgen in Java

Die „natürliche“ Sortierreihenfolge, wie sie vom Menschen verstanden wird, vergleicht Zeichenfolgen anhand ihrer numerischen und alphabetische Komponenten. Dies unterscheidet sich von der standardmäßigen lexikografischen Reihenfolge, bei der die Reihenfolge der Zeichen Vorrang hat.

In Java gibt es keine integrierte Funktion, die speziell für die natürliche Sortierreihenfolge entwickelt wurde. Sie können dieses Verhalten jedoch mit der folgenden externen Implementierung erreichen:

<code class="java">// NaturalOrderComparator.java

// License: Cougaar Open Source License
import java.util.Comparator;

public class NaturalOrderComparator implements Comparator<String> {
    @Override
    public int compare(String s1, String s2) {
        // Split strings into tokens
        String[] s1Tokens = s1.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)");
        String[] s2Tokens = s2.split("(?<=\D)(?=\d)|(?<=\d)(?=\D)");

        // Compare tokens one by one
        int i = 0;
        while (i < Math.min(s1Tokens.length, s2Tokens.length)) {
            try {
                int n1 = Integer.parseInt(s1Tokens[i]);
                int n2 = Integer.parseInt(s2Tokens[i]);

                // Numerical comparison
                if (n1 != n2) {
                    return n1 - n2;
                }
            } catch (NumberFormatException e) {
                // Alphabetical comparison
                int comparison = s1Tokens[i].compareTo(s2Tokens[i]);
                if (comparison != 0) {
                    return comparison;
                }
            }
            i++;
        }

        // If all tokens are equal, compare lengths
        if (s1Tokens.length != s2Tokens.length) {
            return s1Tokens.length - s2Tokens.length;
        }

        // Strings are identical
        return 0;
    }
}</code>

Das obige ist der detaillierte Inhalt vonWie implementiert man einen String-Vergleich mit natürlicher Sortierreihenfolge in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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