2015-09-17 15 views
7

Merhaba Önde gelen sıfırlarla girdi olarak String listesi var ve bunları nasıl sıralayacağımı merak ediyorum. "-" (sıralanmamış) (sıralı)Java'da baştaki sıfırlarla sayı nasıl sıralanır?

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

Çıktı

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

ben kaldırabilir

Giriş ve lider sıfır ama sonra 0-1 -> 1 ve 1 -> 1 aynıdır ve olamaz sıralanmak aklımda gelen diğer şey sıfır ve sonra Java tür ve başlangıç ​​pozisyonuna geri numaralarını ama sıralanmış kullanmaları için

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

geride 0 koymak için sıfır değil bu sayıların içinde kaldırmaktır?

Düzenleme:

  • Yapısı derinlemesine sınırsızdır yüzden 1-2-3-4-5-6 ...
  • Ben sadece 0
  • Sadece tire lider bir (-) ve noktaya (.) izin verilir.
+1

Her zaman sadece bir çizgi var mı? Yoksa yapı daha karmaşık mı? – ojblass

+0

Kaç seviyeniz var? Maks. 2? Sınırsız? – Puce

+2

Ne denediniz? - Dizelerin doğal sıralama düzeninin ihtiyacınız olanı yapıp yapmadığını kontrol ettiniz mi? – JimmyB

cevap

8

Ben - karakteri ile dize bölmek ve daha sonra bir int her parçasını dönüştürmek istiyorum: Artık

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

, sadece dizeleri sıralamak için bu özel karşılaştırıcı kullanın:

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

Eğer liste "String" türündeyse o zaman Gerekli çıktı * doğal düzende *? Özel karşılaştırıcı kullanmadan "Collections.sort" ile doğrudan sıralanabilir. –

+2

@TAsk OP maksimum sayısı 9 evet ise, ("" 10 "<" 2 "') – Hacketo

+3

@TAsk eğer ayırıcılar arasındaki değerlerin tek haneyle sınırlı olduğunu varsayarsak, kabul ediyorum, doğal sipariş iyi çalışıyor olmalı .Anladığım kadarıyla, ayırıcıların arasındaki elementlerin sayıları temsil etmesi, yani "11-1" nin "2-0" dan sonra gelmesini istiyoruz, dolayısıyla doğal sıralama yetersiz kalacaktır. – Mureinik