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

时间:2013-05-07 16:45:54

标签: java sorting

我希望文件按其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<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;
    }

}

6 个答案:

答案 0 :(得分:6)

检查the Collator class

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

答案 1 :(得分:1)

您可以实施自己的Comparator,而Collator又使用{{1}}。请参阅example

答案 2 :(得分: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()));
        }
    }

答案 3 :(得分:1)

尝试这个简单的实现:

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);
    }

答案 4 :(得分: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]

答案 5 :(得分:0)

Collections.sort();使您可以传递自定义比较器进行订购。对于不区分大小写的排序,String类提供了一个称为CASE_INSENSITIVE_ORDER的静态最终比较器。

因此,您需要做的只是:

Collections.sort(caps,String.CASE_INSENSITIVE_ORDER);