为了账号安全,请及时绑定邮箱和手机立即绑定

java如何改变排序的优先级

java如何改变排序的优先级

慕丝7291255 2022-06-04 15:49:06
我知道 ASCII 排序在 java 中很容易使用 Collections.sort 等内置方法,使用 coparator 和可比较的接口,但我想知道是否有任何简单的按标准字母顺序排序的方法使用 ASCII 排序的输出将是: “2012010”、“2012011”、“2012012”、“201201A”使用标准字母顺序的输出将是: “201201A”、“2012010”、“2012011”、“2012012”、我想知道在 java 中是否有使用可比较或比较器接口来获得这种标准字母排序的方法下面的程序提供 ASCII 排序,但我想要标准字母顺序 public class AlphabeticalSort {    public static void main(String args[]) throws NoSuchFieldException, SecurityException{        String[] words = { "2012010", "2012012", "2012011", "201201A" };        for (int i = 0; i < 4; ++i) {            for (int j = i + 1; j < 4; ++j) {                if (words[i].compareTo(words[j]) > 0) {                    String temp = words[i];                    words[i] = words[j];                    words[j] = temp;                }            }        }        System.out.println("In lexicographical order:");        for (int i = 0; i < 4; i++) {            System.out.println(words[i]);        }    }}
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以使用这样的比较器:


public final static Comparator<String> STANDARD_ALPHABETICAL_ORDER =

    (a,b) -> {

        int na = a.length();

        int nb = b.length();

        int r;

        int n;

        if (na < nb) {

            r = -1;

            n = na;

        } else if (na > nb) {

            r = -1;

            n = nb;

        } else {

            r = 0;

            n = na;

        }

        for (int i = 0; i < n; ++i) {

            char ca = a.charAt(i);

            char cb = b.charAt(i);

            if (ca != cb) {

                if (Character.isDigit(ca) && !Character.isDigit(cb)) {

                    return 1;

                } else if (!Character.isDigit(ca) && Character.isDigit(cb)) {

                    return -1;

                } else if (ca < cb) {

                    return -1;

                } else {

                    return 1;

                }

            }

        }

        return r;

    };

然后用它对你的数组进行排序:


    String[] words = { "2012010", "2012012", "2012011", "201201A" };

    Arrays.sort(words, STANDARD_ALPHABETICAL_ORDER);

    System.out.println("In lexicographical order:");

    for (int i = 0; i < 4; i++) {

        System.out.println(words[i]);

    }


查看完整回答
反对 回复 2022-06-04
?
四季花海

TA贡献1811条经验 获得超5个赞

你可以这样编码


包装测试;


导入 java.util.Arrays;导入 java.util.Comparator;


公共类 AlphabeticalSort {


public static void main(String args[]) throws NoSuchFieldException,

        SecurityException {

    String[] words = { "2012010", "2012012", "2012011", "2012011A","2012011B" };


    Arrays.sort(words, new Comparator<String>() {


        @Override

        public int compare(String o1, String o2) {


            int result=0;

            if (isNumber(o1) && isNumber(o2)) {

                result= Integer.valueOf(o1).compareTo(Integer.valueOf(o2));

            } else if (!isNumber(o1) && isNumber(o2)) {

                Integer o1num = Integer.valueOf(o1.replaceAll("[^-?0-9]+",

                        ""));


                if (o1num == Integer.valueOf(o2)) {

                    result= -1;

                } else {

                    result= o1num.compareTo(Integer.valueOf(o2));

                }

            } else if (!isNumber(o2) && isNumber(o1)) {

                Integer o1num = Integer.valueOf(o2.replaceAll("[^-?0-9]+",

                        ""));

                if (o1num == Integer.valueOf(o1)) {

                    result= +1;

                } else {

                    result= o1num.compareTo(Integer.valueOf(o1));

                }

            } else {

                result= o1.compareTo(o2);

            }


            System.out.println("o1="+o1+"  o2="+o2+" result= "+result);

            return result;

        }

    });

    System.out.println("In lexicographical order:");

    for (int i = 0; i < words.length; i++) {

        System.out.println(words[i]);

    }


}


public static boolean isNumber(String val) {

    boolean isNumber = false;


    try {

        Integer.parseInt(val);

        isNumber = true;

    } catch (NumberFormatException e) {

        // e.printStackTrace();

    }


    return isNumber;

}

}


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号