2014-09-21 82 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