2015-09-17 19 views
7

Hallo Ich habe String-Liste als Eingabe mit führenden Nullen und ich frage mich, wie man sie sortiert.Wie sortiere ich Zahlen mit führenden Nullen in Java?

Input (unsortiert)

0-2 
0-1 
1 
1-2 
1-0 
1-1 
4-3 

Output (sortiert)

0-1 
0-2 
1 
1-0 
1-1 
1-2 
4-3 

I entfernen "-" und führende Nullen aber dann 0-1 -> 1 und 1 -> 1 sind gleich und kann nicht sortiert sein. Andere Sache, die in meinem Kopf kommt, ist die Null und in diesen Zahlen zu entfernen, die nicht Null führenden haben 0 zu setzen hinter so

0-1->1 
1->10 
10->100 

dann Java Art und die Rückennummern in der Startposition verwenden, aber sortierte?

Edit:

  • Struktur ist unbegrenzt in der Tiefe so 1-2-3-4-5-6 ...
  • kann ich nur eine führende 0
  • Nur Bindestrich (-) und Punkt (.) sind Dezimeter erlaubt.
+1

Haben Sie immer nur einen Strich? Oder wird die Struktur komplexer? – ojblass

+0

Wie viele Level hast du? Max. 2? Unbegrenzt? – Puce

+2

Was hast du probiert? - Haben Sie überprüft, ob die natürliche Reihenfolge der Strings Ihren Anforderungen entspricht? – JimmyB

Antwort

8

ich die Zeichenfolge durch den - Zeichen aufgeteilt würde und dann jeden Teil konvertieren zu einem int:

public class StringPartsComparator implements Comparator<String> { 

    @Override 
    public int compare (String s1, String s2) { 
     String[] arr1 = s1.split("-"); 
     int len1 = arr1.length; 

     String[] arr2 = s2.split("-"); 
     int len2 = arr2.length; 

     int commonLength = Math.min(len1, len2); 

     // Go over the "common" elements. 
     // Return if any element differs from its counterpart 
     for (int i = 0; i < commonLength; ++i) { 
      int int1 = Integer.parseInt(arr1[i]); 
      int int2 = Integer.parseInt(arr2[i]); 
      int comp = Integer.compare(int1, int2); 
      if (comp != 0) { 
       return comp; 
      } 
     } 

     // All the common elements are equal, 
     // the longer string should be considered "bigger" 
     return Integer.compare(len1, len2); 
    } 
} 

Jetzt, benutzen Sie einfach diesen benutzerdefinierten Komparator Saiten zu sortieren:

List<String> myList = ...; 
Collections.sort(myList, new StringPartsComparator()); 
+2

Wenn die Liste von 'String' Typ ist dann nicht die erforderliche Ausgabe ist in * natürlicher Reihenfolge *? Das kann direkt mit 'Collections.sort' sortiert werden, ohne einen benutzerdefinierten Vergleicher zu verwenden. –

+2

@TAsk wenn OP max Zahl 9 war ja, ('" 10 "<" 2 "') – Hacketo

+3

@Taas wenn wir annehmen, dass die Werte zwischen den Separatoren auf einzelne Ziffern beschränkt sind, stimme ich zu, sollte die natürliche Ordnung gut funktionieren .Die Art und Weise, wie ich es verstanden habe, ist jedoch, dass die Elemente zwischen den Trennzeichen Zahlen darstellen, also würden wir gerne "11-1" 'nach" "2-0" kommen, so dass die natürliche Reihenfolge nicht ausreichen würde. – Mureinik

Verwandte Themen