java - 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 开头的数字进行排序。关于解决此问题的最简单方法的任何想法?谢谢!
解决方案
作品
创建您自己的比较器<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);
}
}
推荐阅读
- postgresql - 比较 pgsql 中的 bigint 值
- python - “Buildozer 未能执行最后一个命令”错误
- python - 使用 Selenium (Python) 将用户输入添加到 csv 文件
- jquery - Videojs:删除当前实例并重新初始化新播放器
- python - 没有堆栈的平衡括号检查器问题
- python - 如何获取路径而不是xml文件中的文件名
- php - FullCalendar - 通过 AJAX 在 div 中动态加载外部事件
- javascript - 为什么javascript Sort方法改变其他变量?
- r - 如何使用 R 从 PROJ4 字符串接收 EPSG 代码?
- sql-server - 如果查询在另一个查询之后执行,则不使用索引