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 Pattern p = Pattern.compile(".*_S(\\d+)_P(\\d+).*");
  8. public int compare(String str1, String str2) {
  9. Matcher m1 = p.matcher(str1);
  10. Matcher m2 = p.matcher(str2);
  11. if (m1.matches() && m2.matches()) {
  12. // get digits for P and S
  13. Integer s1 = Integer.valueOf(m1.group(1));
  14. Integer p1 = Integer.valueOf(m1.group(2));
  15. Integer s2 = Integer.valueOf(m2.group(1));
  16. Integer p2 = Integer.valueOf(m2.group(2));
  17. // compare
  18. return s1.equals(s2) ? p1.compareTo(p2) : s1.compareTo(s2);
  19. } else {
  20. return str1.compareTo(str2); // standard sort if both entries not matching S and P
  21. }
  22. }
  23. }
  24.  
  25. public static void main(String[] args) {
  26. List<String> trendList = Arrays.asList(("ACLK_SCRN_200MHZ_DATAB_S0_P0:8 \n" +
  27. "ACLK_SCRN_200MHZ_DATAB_S0_P10:8\n" +
  28. "ACLK_SCRN_200MHZ_DATAB_S0_P11:8\n" +
  29. "ACLK_SCRN_200MHZ_DATAB_S0_P12:8\n" +
  30. "ACLK_SCRN_200MHZ_DATAB_S0_P13:8\n" +
  31. "ACLK_SCRN_200MHZ_DATAB_S0_P14:8\n" +
  32. "ACLK_SCRN_200MHZ_DATAB_S0_P15:8\n" +
  33. "ACLK_SCRN_200MHZ_DATAB_S0_P1:8 \n" +
  34. "ACLK_SCRN_200MHZ_DATAB_S0_P2:8 \n" +
  35. "ACLK_SCRN_200MHZ_DATAB_S0_P3:8 \n" +
  36. "ACLK_SCRN_200MHZ_DATAB_S0_P4:8 \n" +
  37. "ACLK_SCRN_200MHZ_DATAB_S0_P5:8 \n" +
  38. "ACLK_SCRN_200MHZ_DATAB_S0_P6:8 \n" +
  39. "MLC_C_SAMPLE\n" +
  40. "MLC_SAMPLE\n" +
  41. "SWR\n" +
  42. "TOUCHDOWN\n" +
  43. "ACLK_SCRN_200MHZ_DATAB_S0_P7:8 \n" +
  44. "ACLK_SCRN_200MHZ_DATAB_S0_P8:8 \n" +
  45. "ACLK_SCRN_200MHZ_DATAB_S0_P9:8 \n" +
  46. "ACLK_SCRN_200MHZ_DATAB_S1_P0:8 \n" +
  47. "ACLK_SCRN_200MHZ_DATAB_S1_P10:8\n" +
  48. "ACLK_SCRN_200MHZ_DATAB_S1_P11:8\n" +
  49. "ACLK_SCRN_200MHZ_DATAB_S1_P12:8\n" +
  50. "ACLK_SCRN_200MHZ_DATAB_S1_P13:8\n" +
  51. "ACLK_SCRN_200MHZ_DATAB_S1_P14:8\n" +
  52. "ACLK_SCRN_200MHZ_DATAB_S1_P15:8\n" +
  53. "ACLK_SCRN_200MHZ_DATAB_S1_P1:8 \n" +
  54. "ACLK_SCRN_200MHZ_DATAB_S1_P2:8 \n" +
  55. "ACLK_SCRN_200MHZ_DATAB_S1_P3:8 \n" +
  56. "ACLK_SCRN_200MHZ_DATAB_S1_P4:8 \n" +
  57. "ACLK_SCRN_200MHZ_DATAB_S1_P5:8 \n" +
  58. "TEST_REV").split("\n")
  59. );
  60.  
  61. Collections.sort(trendList, new TrendListComparator());
  62. for (String trend: trendList)
  63. System.out.println(trend);
  64. }
  65. }
Success #stdin #stdout 0.08s 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