import java.util.*;
import java.util.regex.*;
public class Main {
public static class TrendListComparator implements Comparator<String> {
// retrieve the P and S
final Pattern p = Pattern.compile(".*_S(\\d+)_P(\\d+).*");
Matcher m1 = p.matcher(str1);
Matcher m2 = p.matcher(str2);
if (m1.matches() && m2.matches()) {
// get digits for P and S
// compare
return s1.equals(s2) ? p1.compareTo(p2) : s1.compareTo(s2);
} else {
return str1.compareTo(str2); // standard sort if both entries not matching S and P
}
}
}
public static void main
(String[] args
) { List
<String
> trendList
= Arrays.
asList(("ACLK_SCRN_200MHZ_DATAB_S0_P0:8 \n" + "ACLK_SCRN_200MHZ_DATAB_S0_P10:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P11:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P12:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P13:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P14:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P15:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P1:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P2:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P3:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P4:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P5:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P6:8 \n" +
"MLC_C_SAMPLE\n" +
"MLC_SAMPLE\n" +
"SWR\n" +
"TOUCHDOWN\n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P7:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P8:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S0_P9:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P0:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P10:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P11:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P12:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P13:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P14:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P15:8\n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P1:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P2:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P3:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P4:8 \n" +
"ACLK_SCRN_200MHZ_DATAB_S1_P5:8 \n" +
"TEST_REV").split("\n")
);
Collections.
sort(trendList,
new TrendListComparator
()); }
}