亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號