1

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

1 回答 1

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

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

于 2012-12-28T04:21:00.477 回答