java如何改变排序的优先级

我知道 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]);

        }

    }


}


慕丝7291255
浏览 117回答 2
2回答

幕布斯6054654

您可以使用这样的比较器:public final static Comparator<String> STANDARD_ALPHABETICAL_ORDER =&nbsp; &nbsp; (a,b) -> {&nbsp; &nbsp; &nbsp; &nbsp; int na = a.length();&nbsp; &nbsp; &nbsp; &nbsp; int nb = b.length();&nbsp; &nbsp; &nbsp; &nbsp; int r;&nbsp; &nbsp; &nbsp; &nbsp; int n;&nbsp; &nbsp; &nbsp; &nbsp; if (na < nb) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n = na;&nbsp; &nbsp; &nbsp; &nbsp; } else if (na > nb) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n = nb;&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n = na;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < n; ++i) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char ca = a.charAt(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char cb = b.charAt(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (ca != cb) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Character.isDigit(ca) && !Character.isDigit(cb)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (!Character.isDigit(ca) && Character.isDigit(cb)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (ca < cb) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return r;&nbsp; &nbsp; };然后用它对你的数组进行排序:&nbsp; &nbsp; String[] words = { "2012010", "2012012", "2012011", "201201A" };&nbsp; &nbsp; Arrays.sort(words, STANDARD_ALPHABETICAL_ORDER);&nbsp; &nbsp; System.out.println("In lexicographical order:");&nbsp; &nbsp; for (int i = 0; i < 4; i++) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(words[i]);&nbsp; &nbsp; }

四季花海

你可以这样编码包装测试;导入 java.util.Arrays;导入 java.util.Comparator;公共类 AlphabeticalSort {public static void main(String args[]) throws NoSuchFieldException,&nbsp; &nbsp; &nbsp; &nbsp; SecurityException {&nbsp; &nbsp; String[] words = { "2012010", "2012012", "2012011", "2012011A","2012011B" };&nbsp; &nbsp; Arrays.sort(words, new Comparator<String>() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public int compare(String o1, String o2) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int result=0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (isNumber(o1) && isNumber(o2)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= Integer.valueOf(o1).compareTo(Integer.valueOf(o2));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (!isNumber(o1) && isNumber(o2)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Integer o1num = Integer.valueOf(o1.replaceAll("[^-?0-9]+",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ""));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (o1num == Integer.valueOf(o2)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= -1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= o1num.compareTo(Integer.valueOf(o2));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (!isNumber(o2) && isNumber(o1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Integer o1num = Integer.valueOf(o2.replaceAll("[^-?0-9]+",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ""));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (o1num == Integer.valueOf(o1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= +1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= o1num.compareTo(Integer.valueOf(o1));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result= o1.compareTo(o2);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("o1="+o1+"&nbsp; o2="+o2+" result= "+result);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return result;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });&nbsp; &nbsp; System.out.println("In lexicographical order:");&nbsp; &nbsp; for (int i = 0; i < words.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(words[i]);&nbsp; &nbsp; }}public static boolean isNumber(String val) {&nbsp; &nbsp; boolean isNumber = false;&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; Integer.parseInt(val);&nbsp; &nbsp; &nbsp; &nbsp; isNumber = true;&nbsp; &nbsp; } catch (NumberFormatException e) {&nbsp; &nbsp; &nbsp; &nbsp; // e.printStackTrace();&nbsp; &nbsp; }&nbsp; &nbsp; return isNumber;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java