2013-05-07 182 views
8

我希望通過它們的abs路徑名來排​​序文件,但我希望小寫字母在大寫字母之前排序。例如:比方說,我有4個文件:Java如何在大寫字母串之前對小寫字母進行排序

files2.add("b"); 
files2.add("A"); 
files2.add("a"); 
files2.add("B"); 

與此代碼的順序是:A,B,A,B] 我希望它是:A,A,B,B]

import java.io.File; 
import java.util.*; 

public class Abs { 

    public ArrayList<File> getOrder(ArrayList<File> files) { 
     Collections.sort(files, new Comparator<File>() { 
      public int compare(File file1, File file2) { 
       return file1.getAbsolutePath().compareTo(file2.getAbsolutePath()); 
      } 
     }); 
     return files; 
    } 

} 
+3

應該「k.txt」比更小「 G.txt「? – 2013-05-07 16:47:53

+0

這是僅限於拉丁/ Rnglish字符集嗎? – 2013-05-07 16:48:52

+1

如果你的名字有大寫和小寫字母混合?例如AaAa.txt和aAAA.txt?哪一個應該是第一個? – Madthew 2013-05-07 16:49:11

回答

6

檢查the Collator class

你必須仔細閱讀這些常量的意思,但其中一個應該可以讓你在大寫字母前面加上小寫字母。

1

您可以實施自己的Comparator,然後使用Collator。請參閱example

1

您可能會對此行爲使用庫或實用程序類,或者您可以構建自己的比較器。

new Comparator<File>() { 
     public int compare(File file1, File file2) { 
      // Case-insensitive check 
      int comp = file1.getAbsolutePath().compareToIgnoreCase(file2.getAbsolutePath()) 
      // If case-insensitive different, no need to check case 
      if(comp != 0) { 
       return comp; 
      } 
      // Case-insensitive the same, check with case but inverse sign so upper-case comes after lower-case 
      return (-file1.getAbsolutePath().compareTo(file2.getAbsolutePath())); 
     } 
    } 
+0

這個比較器將排序[a,b,A,B]。我想[a,A,b,B] – Kuyo 2013-05-08 01:56:40

+0

從原來的問題來看,這並不是很清楚,但是代碼變得更簡單了。此外,你也可以使用像Igor提供的庫函數。更新的代碼 – dtech 2013-05-08 06:55:16

0

試試這個簡單的實現:

public static void main(String[] args) { 
      List<String> list = new ArrayList<String>(); 
      list.add("a"); 
      list.add("b"); 
      list.add("A"); 
      list.add("B"); 
      System.out.println(list); 
      Collections.sort(list, new Comparator<String>() { 
        @Override 
        public int compare(String o1, String o2) { 
          if (o1.toLowerCase().equals(o2.toLowerCase())) { 
            if (o1.toLowerCase().equals(o1)) { 
              return -1; 
            } else { 
              return 1; 
            } 
          } else { 
            return o1.toLowerCase().compareTo(o2.toLowerCase()); 

          } 
        } 
      }); 
      System.out.println(list); 
    } 
1

至於建議由別人,Collator你想要做什麼。寫的那些和核對規則,一個看起來有點嚇人,但它看起來像標準的英語Collator不正是你想要什麼:

public static void main(String... args) 
{ 
    List<String> items = Arrays.asList("b", "A", "a", "B"); 
    Collections.sort(items, Collator.getInstance(Locale.ENGLISH)); 
    System.out.println(items); 
} 

給出:

[a, A, b, B] 
相關問題