按等级和字母顺序排序IRC用户- Java比较器



我正在尝试用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

您需要在进行字母比较之前处理前缀的大小写:

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

这里我假设这两个字符串不是空的,但是你应该测试一下。

最新更新