我需要按照正確的順序對文件進行排序,就像在默認的Windows資源管理器中一樣。
標準的Java字符串比較器運行良好,直到只有字母值。如果名稱中有任何數字,則表明它的工作原理錯誤,例如:
名稱爲「15 - abc.txt」的文件在列表中位於「2 - abc.txt」之上。
解決多語言情況下這個問題的最佳方法是什麼(應該使用java.text.Collator)?在Java中使用數字名稱對文件進行排序
回答
實現您自己的比較器,根據需要考慮數字。這個比較器可以按組分割文件名:與其他字符分開的數字。
例如15-abc-32b.txt
將產生陣列{"15", "abc", "32", "b"}
。現在比較這樣的數組很簡單。您應該仔細閱讀元素並嘗試使用Integer.pareseInt()
來解析它們。如果解析成功,比較適當的數字,否則比較字符串。
使用Java Comparator並通過按順序分別比較文件名的整數和字符串字段來實現compare()方法。
請注意,java.text.Collator已經實現了Comparator接口。來自[Javadoc](http://docs.oracle.com/javase/7/docs/api/java/text/Collator.html):* Collator類執行區域設置敏感的字符串比較。你使用這個類來建立自然語言文本的搜索和排序例程。* – 2013-04-04 13:52:57
考慮到NumberFormat的解析「15-ABC-32b.txt」爲15(見API),您可以換句話說所以有點像這個
String[] files = new File("dir").list();
Arrays.sort(files, new Comparator<String>() {
NumberFormat f = NumberFormat.getInstance();
public int compare(String f1, String f2) {
try {
return Double.compare(f.parse(f1).longValue(), f.parse(f2).longValue());
} catch (ParseException e) {
throw new IllegalArgumentException(f1 + "|" + f2);
}
}
});
不好的方法。如果我有名爲「abc - (1).txt」的文件不應該起作用。 – SeniorJD 2013-04-04 14:13:01
- 1. 如何按升序對字母數字文件名稱數組進行排序?
- 2. 使用Sqlite對名稱(中文和英文)進行排序
- 3. 使用名稱propery對包含字母和數字的對象進行排序
- 4. 如何使用Java中的文件類型對文件名進行排序
- 5. 使用Java對數組進行排序
- 6. 無法使用名稱空間對xml文件中的節點進行排序
- 7. 在Go中按數字順序對文件進行排序
- 8. 在文本文件中對數字進行排序android
- 9. 對名稱值集合進行排序
- 10. 在Powershell中按名稱對數組進行排序
- 11. 在輸出文件中對文件名進行排序
- 12. PHP按字段名稱對多維數組進行排序
- 13. Python 3.3.2 - 基於數字對名稱列表進行排序
- 14. 如何同時對兩個數字和名稱進行排序
- 15. 使用DirectoryIterator對文件進行排序
- 16. 如何從nsdocumentdirectory按其名稱對文件進行排序?
- 17. 對程序集中的名稱數組進行排序
- 18. 如何使用PEM文件對Java進行PDF數字簽名?
- 19. BASH:用瘋狂的名字對文件進行排序
- 20. 在Python中對數字進行排序
- 21. 在Python中對文件進行排序
- 22. 如何使用shell腳本按名稱對文件進行排序
- 23. 使用SSIS對具有相同標題名稱的文件進行排序
- 24. 如何使用Java對文本文件中的數據進行排序? vol#2
- 25. Java使用合併排序對數組進行排序
- 26. 使用Python按字母順序對CSV文件進行排序
- 27. Java:使用條件對ArrayList中的對象進行排序
- 28. Java中使用對象名稱字段數組進行二進制搜索
- 29. 對文本文件中的字符進行計數/排序
- 30. 對文本文件中的數字進行排序
文件,你不希望它像在Windows資源管理器中工作。 – Keppil 2013-04-04 13:44:52
看起來像你有自己的答案:*應該使用*'java.text.Collator' *。你有沒有試過它? – 2013-04-04 13:45:01
@LuiggiMendoza是的,我有。 – SeniorJD 2013-04-04 14:24:25