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

前端之家收集整理的这篇文章主要介绍了java – 寻找字母顺序和自然顺序的组合(又名用户理智排序)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我认为这很容易找到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”.但这取决于您的偏好,如果这很重要,请将其修改为在数字比较之前跳过前导零.

猜你在找的Java相关文章