Java如何在大写字符串之前对小写进行排序

我希望文件按其abs路径名排序,但我希望小写字母在大写之前排序。 示例:假设我有4个文件:

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

检查Collat​​or类 。

你必须仔细阅读这些常量的含义,但其中一个应该可以让你在大写字母之前加上小写字母。

您可以实现自己的Comparator ,后者又使用Collator 。 见例子 。

您可以使用具有此行为的库或实用程序类,也可以构建自己的比较器。

  new Comparator() { 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())); } } 

正如其他人所说, Collator做你想要的。 编写其中一个整理规则看起来有点可怕,但看起来标准的英语Collator完全符合您的要求:

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

得到:

 [a, A, b, B] 

试试这个简单的实现:

 public static void main(String[] args) { List list = new ArrayList(); list.add("a"); list.add("b"); list.add("A"); list.add("B"); System.out.println(list); Collections.sort(list, new Comparator() { @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); }