gpt4 book ai didi

java - 按每个字符类的自定义规则对字符串数组进行排序

转载 作者:行者123 更新时间:2023-12-01 16:47:19 25 4
gpt4 key购买 nike

今天遇到一个对ArrayList进行排序的问题,但是当我使用默认函数array.sort()时,结果不能满足我的期望。我需要一种规则:数字、字母、中文、其他符号,但默认规则是ASCII码的顺序,所以我尝试重写比较函数。

private static String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>\\\\/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
array.sort(new Comparator<NavigationNode>() {
@Override
public int compare(NavigationNode o1, NavigationNode o2) {
if(p.matcher(o1.getName().substring(0,1)).find() && !p.matcher(o2.getName().substring(0,1)).find()){
return 1;
}else if(!p.matcher(o1.getName().substring(0,1)).find() && p.matcher(o2.getName().substring(0,1)).find()){
return -1;
}
return o1.getName().compareTo(o2.getName());
}
});

如果您有什么建议请告诉我,非常感谢!!!

最佳答案

这就是 Collat​​or 类正在做的事情:https://docs.oracle.com/javase/8/docs/api/java/text/Collator.html

我不确定它如何处理数字和其他符号,它的主要用途是使用不同语言的规则对非 ASCII 字符进行排序。 Collat​​or 实现了 Comparator<>,因此您可以按如下方式使用它:

private static final Collator COLLATOR = Collator.getInstance(...);

array.sort(COLLATOR);

还有一个通用整理器,可用于根据 Unicode 规则混合不同的语言:

private static final Collator COLLATOR = Collator.getInstance(Locale.ROOT);

如果需要,您还可以编写自己的 RuleBasedCollat​​or。

关于java - 按每个字符类的自定义规则对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61748581/

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