1

私は楽しみのために Java で非常に単純な IRC クライアントを作成しようとしていますが、チャネル固有のユーザー リストを扱い始めたところです。次のコードを使用してユーザー リストを並べ替えていますが、正しく並べ替えられません。IRC の階層は次のようになります: ~ & @ % + (qaohv)。これらの接頭辞のいずれも持っていない場合は、ユーザー リストの一番下に配置する必要があります。リストのアルファベット順とランク順を1つのコンパレータで保持するために何ができるか知っている人はいますか?

コンパレータ コード:

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

ここでは、2 つの文字列が空ではないと仮定しますが、テストする必要があります。

于 2012-12-28T04:21:00.477 に答える