fork download
  1. import java.util.*;
  2. import java.util.regex.*;
  3.  
  4. public class Main {
  5. public static class TrendListComparator implements Comparator<String> {
  6. // retrieve the P and S
  7. final Matcher m = Pattern.compile(".*_S(\\d+)_P(\\d+).*_S(\\d+)_P(\\d+).*").matcher("");
  8. public int compare(String str1, String str2) {
  9. if (m.reset(str1 + str2).matches()) {
  10. Integer s1 = Integer.valueOf(m.group(1));
  11. Integer p1 = Integer.valueOf(m.group(2));
  12. Integer s2 = Integer.valueOf(m.group(3));
  13. Integer p2 = Integer.valueOf(m.group(4));
  14. // compare
  15. return s1.equals(s2) ? p1.compareTo(p2) : s1.compareTo(s2);
  16. } else {
  17. return str1.compareTo(str2); // standard sort if no P and S
  18. }
  19. }
  20. }
  21.  
  22. public static void main(String[] args) {
  23. List<String> trendList = Arrays.asList(("ACLK_SCRN_200MHZ_DATAB_S0_P0:8 \n" +
  24. "ACLK_SCRN_200MHZ_DATAB_S0_P10:8\n" +
  25. "ACLK_SCRN_200MHZ_DATAB_S0_P11:8\n" +
  26. "ACLK_SCRN_200MHZ_DATAB_S0_P12:8\n" +
  27. "ACLK_SCRN_200MHZ_DATAB_S0_P13:8\n" +
  28. "ACLK_SCRN_200MHZ_DATAB_S0_P14:8\n" +
  29. "ACLK_SCRN_200MHZ_DATAB_S0_P15:8\n" +
  30. "ACLK_SCRN_200MHZ_DATAB_S0_P1:8 \n" +
  31. "ACLK_SCRN_200MHZ_DATAB_S0_P2:8 \n" +
  32. "ACLK_SCRN_200MHZ_DATAB_S0_P3:8 \n" +
  33. "ACLK_SCRN_200MHZ_DATAB_S0_P4:8 \n" +
  34. "ACLK_SCRN_200MHZ_DATAB_S0_P5:8 \n" +
  35. "ACLK_SCRN_200MHZ_DATAB_S0_P6:8 \n" +
  36. "MLC_C_SAMPLE\n" +
  37. "MLC_SAMPLE\n" +
  38. "SWR\n" +
  39. "TOUCHDOWN\n" +
  40. "ACLK_SCRN_200MHZ_DATAB_S0_P7:8 \n" +
  41. "ACLK_SCRN_200MHZ_DATAB_S0_P8:8 \n" +
  42. "ACLK_SCRN_200MHZ_DATAB_S0_P9:8 \n" +
  43. "ACLK_SCRN_200MHZ_DATAB_S1_P0:8 \n" +
  44. "ACLK_SCRN_200MHZ_DATAB_S1_P10:8\n" +
  45. "ACLK_SCRN_200MHZ_DATAB_S1_P11:8\n" +
  46. "ACLK_SCRN_200MHZ_DATAB_S1_P12:8\n" +
  47. "ACLK_SCRN_200MHZ_DATAB_S1_P13:8\n" +
  48. "ACLK_SCRN_200MHZ_DATAB_S1_P14:8\n" +
  49. "ACLK_SCRN_200MHZ_DATAB_S1_P15:8\n" +
  50. "ACLK_SCRN_200MHZ_DATAB_S1_P1:8 \n" +
  51. "ACLK_SCRN_200MHZ_DATAB_S1_P2:8 \n" +
  52. "ACLK_SCRN_200MHZ_DATAB_S1_P3:8 \n" +
  53. "ACLK_SCRN_200MHZ_DATAB_S1_P4:8 \n" +
  54. "ACLK_SCRN_200MHZ_DATAB_S1_P5:8 \n" +
  55. "TEST_REV").split("\n")
  56. );
  57.  
  58. Collections.sort(trendList, new TrendListComparator());
  59. for (String trend: trendList)
  60. System.out.println(trend);
  61. }
  62. }
Success #stdin #stdout 0.09s 380160KB
stdin
Standard input is empty
stdout
ACLK_SCRN_200MHZ_DATAB_S0_P0:8 
ACLK_SCRN_200MHZ_DATAB_S0_P1:8 
ACLK_SCRN_200MHZ_DATAB_S0_P2:8 
ACLK_SCRN_200MHZ_DATAB_S0_P3:8 
ACLK_SCRN_200MHZ_DATAB_S0_P4:8 
ACLK_SCRN_200MHZ_DATAB_S0_P5:8 
ACLK_SCRN_200MHZ_DATAB_S0_P6:8 
ACLK_SCRN_200MHZ_DATAB_S0_P7:8 
ACLK_SCRN_200MHZ_DATAB_S0_P8:8 
ACLK_SCRN_200MHZ_DATAB_S0_P9:8 
ACLK_SCRN_200MHZ_DATAB_S0_P10:8
ACLK_SCRN_200MHZ_DATAB_S0_P11:8
ACLK_SCRN_200MHZ_DATAB_S0_P12:8
ACLK_SCRN_200MHZ_DATAB_S0_P13:8
ACLK_SCRN_200MHZ_DATAB_S0_P14:8
ACLK_SCRN_200MHZ_DATAB_S0_P15:8
ACLK_SCRN_200MHZ_DATAB_S1_P0:8 
ACLK_SCRN_200MHZ_DATAB_S1_P1:8 
ACLK_SCRN_200MHZ_DATAB_S1_P2:8 
ACLK_SCRN_200MHZ_DATAB_S1_P3:8 
ACLK_SCRN_200MHZ_DATAB_S1_P4:8 
ACLK_SCRN_200MHZ_DATAB_S1_P5:8 
ACLK_SCRN_200MHZ_DATAB_S1_P10:8
ACLK_SCRN_200MHZ_DATAB_S1_P11:8
ACLK_SCRN_200MHZ_DATAB_S1_P12:8
ACLK_SCRN_200MHZ_DATAB_S1_P13:8
ACLK_SCRN_200MHZ_DATAB_S1_P14:8
ACLK_SCRN_200MHZ_DATAB_S1_P15:8
MLC_C_SAMPLE
MLC_SAMPLE
SWR
TEST_REV
TOUCHDOWN