2014-02-07 50 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 –