2014-02-07 40 views
3

所以我有一堆字母数字的项目,如的列表...比较与Collections.sort()可用于alphanumberic列表

"123456" 
"alpha" 
"tango" 
"beta" 
... 

我一直在寻找使用Collections.sort()本作的分类列表,但我需要先按数字排序(1234,AAAA,aaaa,BBBB,bbbb,...),然后再按大写和小写字母排序。所有元素都是包含任何明显数字的字符串。 Collections.sort()会处理这种情况,因为它们实际上都是字符串,或者如果不使用Comparator来完成此操作? 或者有没有其他方式可以更有效地使用正则表达式来完成此操作?

谢谢。

+1

你为什么不试试? –

+0

@JBNizet,因为总会有人愿意陷入;) –

+0

我通常会JB,但在目前我无法编码任何东西。我只是想通过一个错误在心理上工作,并且认为我会检查什么时候可以再写一次。 –

回答

5

你可以使用一个Collator

List<String> list = Arrays.asList("1234","AAAA","aaaa","BBBB","bbbb"); 
Collator c = Collator.getInstance(Locale.ENGLISH); 
c.setStrength(Collator.CANONICAL_DECOMPOSITION); 

Collections.sort(list); 
System.out.println("without collator: " + list); 
Collections.sort(list, c); 
System.out.println("with collator: " + list); 

输出:

没有核对部:1234,AAAA,BBBB,AAAA,BBBB]
与核对部:1234,AAAA,AAAA ,BBBB,bbbb]

注意:你可能需要一个不同的collat​​or来满足你的需要,尽管这看起来不错。在最坏的情况下,您可以创建a RuleBaseCollator with your specific rules

+0

好的,谢谢!我现在无法测试这个,但从我看到的结果中可以看出来。这应该能够为我正在做的事情工作。 –

+0

您在问题中提到“......后面跟着大写小写词”,但您也会说“aaaa”应该在“BBBB”之前出现。我认为你错误地要求了其中一项要求。 –

+0

不,它们必须按字母顺序排列,但如果有重复的字符串,并且其中一个是大写字母,则首先使用大写字母。对不起,有任何困惑。 AAAA-> aaaa-> BBBB-> BBBB –