2013-04-18 38 views
2

我尋覓了很多了兩天,我沒有成功的字符串,排序號碼與負整數

現在我有7個整數(包括+和 - )字符串與逗號分隔。

我寫了一個示例代碼來解釋。

 ArrayList<String> str = new ArrayList<String>(); 

     str.add("9,-9,21,23,28,29,35"); 
     str.add("18,18,-21,28,28,32,34"); 
     str.add("-11,-11,22,28,29,-30,31"); 
     str.add("8,-8,26,31,31,31,31"); 
     str.add("8,8,26,-32,25,29,35"); 
     str.add("10,9,-21,45,25,29,35"); 
     str.add("-11,59,21,25,25,-29,35"); 
     str.add("12,-9,21,55,25,29,15"); 
     str.add("9,9,21,25,25,-29,35"); 
     str.add("7,9,21,25,-35,25,35"); 
     str.add("4,-39,21,-15,25,-29,35"); 
     str.add("9,9,21,25,27,29,-35"); 
     str.add("10,9,21,35,25,39,15"); 
     str.add("8,-9,21,-25,25,29,-35"); 
     str.add("18,-9,21,-23,25,29,-35"); 

     Collections.sort(str); 

這不會返回正確的排序數組。它用數字的第一個數字進行測試並繼續進行分類。

但我想要的是,排序必須基於字符串中的第一個數字。只有數字相同(比如說第一個字符串數組中有三個9),它應該檢查那些(綁定的字符串)中的第二個數字並相應地進行排序等等。

結果應該爲

9 , -9 , 21 , 23 , 28 , 29 , 35 
9 , 9 , 21 , 25 , 25 , -29 , 35 
9 , 9 , 21 , 25 , 27 , 29 , -35 

有沒有在這個方法來進行排序的方法。請讓我知道,如果有任何相關的答案,歡迎。

在此先感謝。

+0

你要排序的ArrayList或ArrayList中的元素,請說清楚...... – Pragnani 2013-04-18 05:43:26

+0

我要排序的數組列表不是元素在列表中。 – VIGNESH 2013-04-18 06:44:28

回答

1

使用此比較方法,比較了sort(List list, Comparator c)

Collections.sort(str, new Comparator<String>(){      
    public int compare(String str1, String str2){ 
     int result = 0; 
     int i = 0; 
     String [] s1 = str1.split(","); 
     String [] s2 = str2.split(","); 
     while ((i < s1.length) && (i < s2.length) && (result == 0)){ 
     result = (Integer.parseInt(s1[i]) - Integer.parseInt(s2[i])); 
     i++;   
     } 
     return (result); 
    } 
}); 
+0

感謝您的回答,但是這是作爲無限循環運行的。 – VIGNESH 2013-04-18 06:43:10

+0

@Vignesh對不起,你必須增加我。只是修好了 – CloudyMarble 2013-04-18 06:45:34

+0

謝謝,非常感謝。 – VIGNESH 2013-04-18 06:54:08

1

編寫您的自定義排序邏輯並通過Collection#sort

Collections.sort(str, new Comparator<String>(){ 
          public int compare(String str1, String str2){ 
           // Write your logic 
           // @return a negative integer, zero, or a 
           // positive integer as the first argument is less 
           // than, equal to, or greater than the second. 
          } 
         }); 
2

您正在使用不正確的數據類型作爲所需的排序語義。 Java看到你想對字符串進行排序,所以它按照字典順序對它們進行排序,因爲你沒有告訴它做什麼。 Java是沒有思想的讀者:)

而不是嘗試排序字符串,如「9,-9,21,23,28,29,35」,排序整數數組,如{9,9, - 9,21,23,28,29,35}。您仍然必須爲比較器編寫自己的邏輯,但現在相對比較容易,因爲您不必執行任何字符串解析。

如果您需要排序的數據以字符串格式到達您的程序,請嘗試split','然後將字符串數組的每個組件解析爲一個int,最後將其全部轉儲到int數組或ArrayList中。

0

您可以創建一個新的類,說NumberListString實現Comparable接口與此字符串作爲私人領域。提供適當的構造函數以及訪問器/增變器。

現在重寫compareTo方法併爲此比較提供邏輯。

然後爲了排序使用Collections.sort(str)。這將按要求的方式對您的列表進行分類。

或者,您可以隨時創建一個匿名比較器並將其提供給您的Collections.sort方法。

注意:我會推薦第一種方法,因爲它允許您抽象其他可能需要在此特定類型的字符串上執行的操作。