2014-09-21 42 views
-2

我在java控制台中排序文件时遇到问题。 模式文件名是:java按点名排序文件

book.chap.subs1-0.3.4-1.txt

在下列文件中只有数字正在发生变化。有没有人有一个想法如何分拣?

+0

所有数字的变化?应该如何1-0.333.4-1?排序? – aioobe 2014-09-21 09:28:05

回答

0

应该使用Comparable接口或Comparator

List<String> al = Arrays.asList("book.chap.subs1-0.3.4-1.txt", 
      "book.chap.subs1-0.3.4-6.txt", 
      "book.chap.subs1-0.5.4-1.txt", 
      "book.chap.subs1-7.3.4-1.txt", 
      "book.chap.subs1-0.3.6-1.txt", 
      "book.chap.subs1-0.6.4-1.txt", 
      "book.chap.subs2-0.3.8-1.txt"); 

Collections.sort(al, new Comparator<String>() { 

    /** 
    * Retrieve version numbers for a fileName 
    * return int[] 
    */ 
    private int[] getNumbers(String fileName) { 
     Pattern p = Pattern.compile("book\\.chap\\.subs([0-9]+)-([0-9]+)\\.([0-9]+)\\.([0-9]+)-([0-9]+)\\.txt"); 
     int[] numbers = new int[5]; 
     Matcher m = p.matcher(fileName); 
     if (m.find()) { 
      for (int i = 1; i <= 5; i++) { 
       String n = m.group(i); 
       numbers[i - 1] = Integer.parseInt(m.group(i)); 
      } 
     } 
     return numbers; 
    }; 

    @Override 
    public int compare(String s1, String s2) { 
     int[] n1 = getNumbers(s1); 
     int[] n2 = getNumbers(s2); 

     for (int i = 0; i < 5; i++) { 
      if (n1[i] > n2[i]) { 
       return 1; 
      } else if (n1[i] < n2[i]) { 
       return -1; 
      } 
     } 
     return 0; 
    } 
}); 

for (int i = 0, len = al.size(); i < len ; i++){ 
    System.out.println(al.get(i)); 
} 
+0

感谢您的回答。另一个问题:如何开发此代码以支持2个数字号码? – pablo450 2014-09-21 10:09:56

+0

2个版本号码?你能分享文件名吗? – Hacketo 2014-09-21 10:15:52

+0

对不起,联系方式的差距。这是关于文件名称模式: book.chap.subs11-10.31.41-11.txt – pablo450 2014-09-21 17:16:07