我试图解决的另一个Java排序

时间:2015-01-25 23:34:58

标签: java sorting

我必须验证html中的数据列是否正确排序。我将它复制到Java列表中,制作一个我排序并进行比较的副本。不幸的是,Java的排序与创建表的程序不同(它也与Excel排序的方式相同)。所以我写了一个比较器并想知道评论?另外我想知道是否已经有一个类存在,你给它一个字符串的升序字符,它排序? Collat​​or可能会这样做但我试着写它并且从来没有让它工作。这是我的比较器:

static class xcomp implements Comparator {
    String cst = "'-–— !\"#$%&()*,./:;?@[\\]^ˆ_`{|}~¡¦¨¯´¸¿˜‘’‚“”„‹›+<=>±«»×÷0123456789AaªÁáÀàÂâÄäÃãÅåÆæBbCcÇçDdÐðEeÉéÈèÊêËëFfƒGgHhIiÍíÌìÎîÏïJjKklMmNnÑñoºÓóÒòÔôÖöÕõØøŒœPpQqRrSŠšßTtÞþ™UuÚúÙùÛûÜüVvWwXxYyÝýŸÿZzŽž";

    public void xcomp(String sort) {
        cst = sort;
    }

    @Override
    public int compare(Object o1, Object o2) {

        if (o1 == null && o2 == null) {
            return 0;
        }

        if (o1 == null) {
            return -1;
        }

        if (o2 == null) {
            return 1;
        }

        String s1 = (String) o1;
        String s2 = (String) o2;

        int l1 = s1.length();
        int l2 = s2.length();

        if (s1.equals(s2)) {
            return 0;
        }

        int l = Math.min(l1, l2);
        for (int i = 0; i < l; i++) {
            char c1 = s1.charAt(i);
            char c2 = s2.charAt(i);
            int p1 = cst.indexOf(c1);
            int p2 = cst.indexOf(c2);

            if (p1 == -1 || p2 == -1) {
                p1 = (int) c1;
                p2 = (int) c2;
            }

            if (p1 != p2) {
                return (int) (p1 - p2);
            }
        }

        // Strings are the same so far
        return (l1 - l2);
    }

1 个答案:

答案 0 :(得分:0)

这是比较器中的一个错误。

  if (p1 == -1 || p2 == -1) {
       p1 = (int) c1;
       p2 = (int) c2;
  }

如果p1p2为减1,则表示该字符不在您的收集序列中。您需要拯救(抛出异常),或将其一致地视为已知字符的“之前”或“之后”。那不是你在做什么。