我试图在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
答案 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;
}
}
这里我假设两个字符串不为空,但你应该测试它。