加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 寻找字母顺序和自然顺序的组合(又名用户理智排序)

发布时间:2020-12-14 05:46:21 所属栏目:Java 来源:网络整理
导读:我认为这很容易找到premade,但似乎我在网上找到的任何解决方案只能解决部分问题. 我想对用户提供的文件名列表(文件大多以人和/或地址命名),有时用不同的语言(大多数是德语,有点法语和意大利语混合在一起),很少有任何其他西方语言). 我们的想法是以(德国)用户
我认为这很容易找到premade,但似乎我在网上找到的任何解决方案只能解决部分问题.

我想对用户提供的文件名列表(文件大多以人和/或地址命名),有时用不同的语言(大多数是德语,有点法语和意大利语混合在一起),很少有任何其他西方语言).

我们的想法是以(德国)用户普遍认为理智的方式呈现此列表.这意味着顺序应该遵循Locale.GERMAN的java.text.Collat??or,但同时期望是对字符串中的数字进行异常,因此“10”在“2”之后.

我找到了在网上进行自然排序的代码,但它依赖于逐字符比较(而Collat??or不支持).我可以使用子字符串来破解某些内容,但在比较器内部,我认为在每次比较调用时创建多个子字符串并不是最明智的想法.

任何想法如何有效地实现这一点(在执行时间和实现时间),或者更好的是经过测试和随时可用的实现?

解决方法

如果你使用@millimoose建议的比较器(http://www.davekoelle.com/alphanum.html)修改它以通过Collat??or
public class AlphanumComparator implements Comparator
{
private Collator collator;
public AlphanumComparator(Collator collator) {
    this.collator = collator;
}
.....
    public int compare(Object o1,Object o2)
    {
......
result = thisChunk.compareTo(thatChunk); //should become
collator.compare(thisChuck,thatChuck);
....

这段代码似乎有问题,例如“01”更大,然后是“2”.但这取决于您的偏好,如果这很重要,请将其修改为在数字比较之前跳过前导零.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读