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”.但这取决于您的偏好,如果这很重要,请将其修改为在数字比较之前跳过前导零. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |