首页 > 解决方案 > Java:如何在不区分大小写的情况下按字母顺序对 ArrayList 进行排序,并在末尾使用任意数量的字符串

问题描述

我想按字母顺序对我的 ArrayList 进行排序(不区分大小写),但列表末尾有任意数量的字符串(例如“1999”)。以下面的代码为例:

ArrayList<String> names = new ArrayList<>();
names.add("abby");
names.add("Abigail");
names.add("Dylan");
names.add("becky");
names.add("011");

我怎样才能让它看起来像:

["abby", "Abigail", "becky", "Dylan", "011"]

我打算使用以下代码:

Collections.sort(list, String.CASE_INSENSITIVE_ORDER);

虽然它对 ArrayList 开头的数字进行排序。关于解决此问题的最简单方法的任何想法?谢谢!

标签: javasortingarraylistcollections

解决方案


作品

创建您自己的比较器<String>。首先测试数字,然后使用 String.CASE_INSENSITIVE_ORDER。

public class MyStringComparator implements Comparator<String> {
  public int compareTo(String a, String b) {
    //if both a and b are digits, maybe use String.CASE_INSENSITIVE_ORDER?
    //if a is all digits return -1
    //if b is all digits return 1
    return String.CASE_INSENSTIVE_ORDER(a,b);
  }
}

推荐阅读