按排名和字母顺序对IRC用户进行排序 - Java Comparator

时间:2012-12-28 04:07:43

标签: java list irc comparator

我试图在java中创建一个非常简单的IRC客户端以获得乐趣,并且刚开始处理特定于频道的用户列表。我使用以下代码对用户列表进行排序,但它并没有完全按照它应该排序。 IRC层次结构如下:〜& @%+(qaohv),如果有人没有这些前缀之一,他们应该在用户列表的底部。有人知道我能做些什么来保留一个比较器的字母顺序和排序顺序吗?

比较代码:

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 个答案:

答案 0 :(得分: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;
    }       
}

这里我假设两个字符串不为空,但你应该测试它。