gpt4 book ai didi

java 如何改变排序的优先级

转载 作者:行者123 更新时间:2023-12-02 10:18:28 24 4
gpt4 key购买 nike

我知道使用 Collections.sort 等内置方法在 java 中进行 ASCII 排序很容易,使用coparator和类似的接口(interface),但我想知道是否有任何简单的方法可以按标准字母顺序排序

使用 ASCII 排序的输出将是:“2012010”、“2012011”、“2012012”、“201201A”
使用标准字母顺序的输出将是:“201201A”“2012010”,“2012011”,“2012012”,

我想知道java中是否可以使用可比较或比较器接口(interface)来获得标准字母排序

下面的程序提供了 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]);
}
}

}

最佳答案

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

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

关于java 如何改变排序的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54511145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com