使用正则表达式的字符串java排序ArrayList
我有一个字符串值的ArrayList(它们需要格式化),我需要按年份进行排序。列表如下所示:
01-05-2011
11-24-2011
01-12-2012
...
目前,我已经将它们按字母顺序按月排序,但我想知道如何按年份对这个字符串数组列表进行排序
你可以在下面搜索框中键入要查询的问题!
我有一个字符串值的ArrayList(它们需要格式化),我需要按年份进行排序。列表如下所示:
01-05-2011
11-24-2011
01-12-2012
...
目前,我已经将它们按字母顺序按月排序,但我想知道如何按年份对这个字符串数组列表进行排序
# 1 楼答案
我在这里结合了两个建议的解决方案
# 2 楼答案
使用
Collections.sort
并构建一个使用正则表达式的Comparator
# 3 楼答案
我不会为此使用正则表达式——基本上你应该实现
Comparator<String>
来比较任何两个字符串。您可以通过重新排列字符串的位(例如,将其转换为yyyyMMdd格式),然后执行字典比较,或者将字符串解析为日期,然后比较这两个日期不管是哪种方式,您都要将比较器传递到
Collections.sort()
请注意,这个建议将对它们进行完整的排序——所以按年、月、日进行排序。如果你只是按年份排序,它们仍然不会按真正的时间顺序排列。我个人倾向于完全按时间顺序来做,因为这可能会在以后引起更少的惊喜
# 4 楼答案
如果设置为使用regexp,请按如下方式转换字符串:
这个表达式捕获日期的元素,并对它们重新排序,使变化较慢的元素更接近字符串的开头。现在字符串可以按日期按字母顺序排序
# 5 楼答案
Collections.sort
取一个^{String
s。您只需按字典顺序比较每个字符串的最后4位,就完成了Collections.sort
是stable,因此如果字符串已经按月份排序,并且按年份排序,那么具有相同年份的字符串组仍将按月份排序不过,理想情况下,您应该将列表转换为字符串以外的列表,例如Joda time dates。现在这个代码是stringly typed。你越早接受输入并将它们强制为有意义的对象,你的代码就越不需要做出输入假设,当你的假设不太成立时,你需要调试的代码行就越少