2012-12-28 22 views
1

我正嘗試在java中創建一個非常簡單的IRC客戶端以獲得樂趣,並剛開始處理特定於頻道的用戶列表。我正在使用下面的代碼對用戶列表進行排序,但它沒有完全按照它應該進行排序。 IRC的層次結構如下所示:〜& @%+(qaohv),如果有人沒有這些前綴之一,他們應該在用戶列表的底部。有人知道我可以做什麼來保留一個比較器的列表的字母順序和排序順序嗎?按排名和按字母順序對IRC用戶排序 - Java Comparator

比較代碼:上述比較器的

public class StringComparator implements Comparator<String> { 
    @Override 
    public int compare(String a, String b) { 
     return a.compareToIgnoreCase(b); 
    }  
} 

輸出示例:

%Brennan 
&Adam 
&Sheldon 
+Mike 
+Yoda 
@Phil 
@Unleashed 
Jean 
Damien 
~Tim 

回答

1

需要做字母比較之前處理前綴的情況:

public class StringComparator implements Comparator<String> { 
    @Override 
    public int compare(String a, String b) { 
     int pfx = betterPrefix(a[0],b[0]); 
     if (pfx != 0) 
      return pfx; 
     return a.compareToIgnoreCase(b); 
    } 


    private int betterPrefix(char a, char b) { 
     String prefixOrder = "@%&+" 

     int idxa = prefixOrder.indexOf(a); 
     if (idxa < 0) idxa = prefixOrder.length(); 
     int idxb = prefixOrder.indexOf(b); 
     if (idxb < 0) idxb = prefixOrder.length(); 

     return idxa - idxb; 
    }  
} 

這裏我想這兩個字符串不是空的,但你應該測試它。

+0

這在某種程度上有效,但對於沒有前綴的人無效。 – Timr

+0

爲什麼?如果沒有前綴,indexOf返回-1,差值爲0.然後,經典比較接管。 – lbonn

+0

我不知道,但使用上面我得到這個:http://pastebin.com/6Qw8kL7y – Timr