java - 按(区分大小写)字母顺序对字符串进行排序的简单方法

标签 java string comparator alphabetical

我需要按字母顺序对字符串列表进行排序:

List<String> list = new ArrayList();
list.add("development");
list.add("Development");
list.add("aa");
list.add("AA");
list.add("Aa");

一种常见的方法是使用比较器:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

CaseInsensitiveComparator 的“AA”等于“aa”的问题。结果中出现相同值的字符串按照相加的顺序出现,不正确:

"aa","AA","Aa","development","Development"

最佳答案

如果您不想添加对 Guava 的依赖项(根据 Michael 的回答),那么这个比较器是等效的:

private static Comparator<String> ALPHABETICAL_ORDER = new Comparator<String>() {
    public int compare(String str1, String str2) {
        int res = String.CASE_INSENSITIVE_ORDER.compare(str1, str2);
        if (res == 0) {
            res = str1.compareTo(str2);
        }
        return res;
    }
};

Collections.sort(list, ALPHABETICAL_ORDER);

而且我认为它很容易理解和编码......

方法的最后4行可以更简洁的写成如下:

        return (res != 0) ? res : str1.compareTo(str2);

关于java - 按(区分大小写)字母顺序对字符串进行排序的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11176227/

相关文章:

java - 模式在字符串中替换为转义字符,replaceAll 失败

c++ - std::string 的奇怪行为

java - 如何为特定字符串编写自定义 Java 比较器?

java - java注解中的私有(private)字段

java - 为什么 SimpleDateFormat.parse().getTime() 返回不正确(负)值?

java - 为什么 Stream::flatMap 的这种用法是错误的?

java - 在 HSSFWorkbook 中设置 Activity 单元格

xcode - Swift 2.0 中如何获取另一个字符串中两个文本 block 之间的子字符串

java - Comparator.comparing 使用嵌套对象的字段对列表进行排序

java - 有没有办法在不区分大小写的情况下比较 2 个字符串?