java - 如何根据某些子串对字符串进行排序?

标签 java string sorting

我有一个 ArrayList<String> 。列表中的条目可以采用以下形式:

42356_11_1_9345668
562834_12_1_8674852_8
52423_4_2_586284_2
5234_13_9_535567

正如您所看到的,中间部分包含日期:xx_y 是日期和月份。左侧和右侧的其他值可以是任意长度。有些字符串有最后一位附加数字。

我想首先根据月份(xx_y 中的 y)对列表进行排序,然后根据天(xx_y 中的 xx)对列表进行排序。当然,月份和日期也有可能相等。在这种情况下,还应该根据月份后面的数字进行排序(例如第二个示例中的 8674852)。

如何做到这一点?如果使用其他数据结构更容易,那没关系,我很灵活。

最佳答案

如果您可以将它们放入其他数据结构中,您绝对应该这样做。每次你想用它做某事时解析一个字符串是很痛苦的。

public class Entry implements Comparable<Entry>    // Pick a more descriptive name
{
    int firstNumber;
    int month;
    int day;
    int lastNumber;

    public int compareTo(Entry other)
    {
        int comparison = month - other.month;
        if (comparison == 0)
            comparison = day - other.day;
        return comparison;
    }
}

创建这些条目的列表,然后使用 Collections 方法对其进行排序:

Collections.sort(list);

关于java - 如何根据某些子串对字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351665/

相关文章:

vb.net 字符串仅包含 4 位数字(或年份)

c# - 当对象确实是一个字符串时,转换与将对象转换为字符串

python - 按字母顺序对结构中的数组进行排序?

java - 在多线程环境中是否可以仅通过一个线程使用单例实例?

java - 如何访问存储在链表集合中的对象的实例变量?

java - 不幸的是,应用程序已停止工作?

Java 将时间转换为 iso_instant

c++ - 从 char* 中提取 '\r' 之前的所有字符

json - jq 按版本排序为字符串

java - 按大小对 ArrayList 中的集合进行排序