2013-05-07 143 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] 
相关问题