首页 > 解决方案 > 基于Java中的给定模式对字符串数组进行排序

问题描述

我的输入字符串数组如下:

字符串[] arr = {“2T1BURHE1JCO24154C”、“2TABURHE1JC024154C”、“JTDKARFP5H3055472C”、“2T2BURHE1JCO24154C”、“JTDKARFP1H3056246C”};

输出数组应如下所示:

           {"JTDKARFP1H3056246C", 
           "JTDKARFP5H3055472C", 
           "2TABURHE1JC024154C", 
           "2T1BURHE1JCO24154C", 
           "2T2BURHE1JCO24154C"}

这里优先级在以下模式中给出:

[ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]

当我在 Java 中使用 Arrays.sort(arr) 时,它以字典模式对数组进行排序并给出以下输出:

[2T1BURHE1JCO24154C、2T2BURHE1JCO24154C、2TABURHE1JC024154C、JTDKARFP1H3056246C、JTDKARFP5H3055472C]

我怎么能在Java中实现这一点。

谢谢。

标签: javaarraysstringsortingdesign-patterns

解决方案


You need custom a Comparator, you can do it by compare the character's position in the order:

public static void main(String[] args) {
    String[] arr = {"2T1BURHE1JCO24154C",
            "2TABURHE1JC024154C",
            "JTDKARFP5H3055472C",
            "2T2BURHE1JCO24154C",
            "JTDKARFP1H3056246C"};

    String order = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    Arrays.sort(arr, (first, second) -> {
        for (int index = 0; index < second.length(); index++) {
            int charFirst = (int) (first.charAt(index));
            int charSecond = (int) (second.charAt(index));
            if (order.indexOf(charFirst) >  order.indexOf(charSecond)) {
                return 1; 
            } else if (order.indexOf(charFirst) <  order.indexOf(charSecond)) {
                return -1;
            } else {
                continue;
            }
        }
        return 0;
    });

    for (String s : arr) {
        System.out.println(s);
    }
}

output:

JTDKARFP1H3056246C
JTDKARFP5H3055472C
2TABURHE1JC024154C
2T1BURHE1JCO24154C
2T2BURHE1JCO24154C

推荐阅读