2013-03-01 158 views
2

我需要按降序對整數值排序String[]。我使用String [],因爲數組的內容可以是字符串或整數。使用Collections.reverseOrder()排序字符串[]

排序降序排列,

Arrays.sort(rows, Collections.reverseOrder()); 

其中行包含"14","0","3";

如果string []包含單詞,則排序工作正常。

我看到Collections.reverseOrder()不適用於原始類型,但由於我使用的是String[]而不是int[],它會屬於該類別嗎?

如果是這樣,我們有一個排序機制,而不是使用for循環嗎?

+0

你是說這個數組包含'String'和'Integer'實例(不應該用'String []'來實現),或者它包含*整數的字符串。 ''14「','」0「','」3「'? – 2013-03-01 11:39:53

+0

是的,該數組包含整數字符串值「14」,「0」,「3」 – aradhak 2013-03-01 11:41:04

+0

而問題是,他們沒有按正確的順序排序? – 2013-03-01 11:43:24

回答

2

該要求非常具體且不尋常,當然,它沒有標準的方法。但是你可以提供自定義的比較:

Arrays.sort(rows, new Comparator<String>() 
{ 
    public int compare(String o1, String o2) 
    { 
     return Integer.parseInt(o2) - Integer.parseInt(o1); 
    } 
}); 

而且你必須決定做什麼,如果一個字符串具有不可分析整數和處理NumberFormatException

+0

感謝您的回覆。所以我使用了一個if循環來查看輸入字符串是否包含一個整數,並且是if(rows [0] .matches(「\\ d +」)){Arrays。排序(行,新比較器()...}。 – aradhak 2013-03-01 12:12:17

0

如果您想按數字順序排序,您需要一個數字類型,而不是String。您可以創建一個Integer的數組並對其進行排序。

1

問題是字符串的自然順序與數字的順序不同:"1" < "11" < "2"而不是1 < 2 < 11。 這是寫自己比較的問題:

Arrays.sort(rows, new Comparator<String>() { 
     public int compare(String o1, String o2) { 
      return -(Integer.parseInt(o1) - Integer.parseInt(o2)); 
     } 
    }); 

它將使用每個字符串的整數值 - 它會崩潰,如果任何字符串不是整數 - ,它會給因爲相反的順序它返回正常值-。它也是低效的,因爲它在每次比較中都解析每個字符串。

0

使用字母字符串完成排序。字符串"3"大於"14",因爲 字符'3'大於char '1'(以相反順序)。

你需要通過一個自己的比較器女巫將字符串轉換爲整數,然後再比較它們,或者使用整數形式,以便它們具有相同數量的數字並導致0

如果在同一個數組中有一個字符串作爲字符串,而不能獲得有序的數字。