判断数字是否连续,并按指定方式展示
目前有个需求是这样的:
若一个订单中涉及多个票号,显示所有涉及的票号,显示格式如下
例1:9992404665651~3(=9992404665651、9992404665652、9992404665653);
例2:9992404665658~60(=9992404665658、9992404665659、9992404665660);
例3:9992404665697~702(=9992404665697、9992404665698、9992404665699、9992404665700、9992404665701、9992404665702)
例4:9992404665651~3
9992404665656~7 (=9992404665651、9992404665652、9992404665653、9992404665656、9992404665657);
我的实现是这样的:
1 /** 2 * 分隔符 3 */ 4 private static final String SPLIT = ","; 5 6 private String dealTicketNo(String ticketNo){ 7 if(!ticketNo.contains(SPLIT)){ 8 return ticketNo; 9 } 10 String[] titArr = ticketNo.split(SPLIT); 11 long[] a = this.StringToLong(titArr); 12 if(a.length == 1){ 13 return String.valueOf(a[0]); 14 } 15 StringBuilder ticketStr = new StringBuilder(); 16 Arrays.sort(a); 17 if(a[0]+1 != a[1]){ 18 ticketStr.append(a[0]+SPLIT); 19 } 20 else { 21 ticketStr.append(a[0]+"~"); 22 } 23 24 long before = a[0]; 25 long after = 0; 26 for(int i = 1 ; i < a.length-1 ; i++){ 27 if((a[i]-1 != a[i-1])&(a[i]+1 != a[i+1])){ 28 ticketStr.append(a[i]+SPLIT); 29 } 30 else if((a[i]-1 ==a[i-1])&(a[i]+1 != a[i+1])){ 31 after = a[i]; 32 String to = getTo(before, after); 33 ticketStr.append(to+SPLIT); 34 } 35 else if((a[i]-1 ==a[i-1])&(a[i]+1 == a[i+1])){ 36 ticketStr.append(""); 37 } 38 else { 39 before = a[i]; 40 ticketStr.append(a[i]+"~"); 41 } 42 } 43 44 if(a.length == 2 && a[0]+1 != a[1]){ 45 ticketStr.append(a[a.length-1]); 46 }else{ 47 after = a[a.length-1]; 48 String to = getTo(before, after); 49 ticketStr.append(to); 50 } 51 return ticketStr.toString(); 52 } 53 54 /** 55 * String数组转为int数组并去重 56 * @param arrs 57 * @return 58 */ 59 private long[] StringToLong(String[] arrs){ 60 Set<String> set = new HashSet<>(); 61 for(int i=0;i<arrs.length;i++){ 62 set.add(arrs[i]); 63 } 64 String[] setArr = set.toArray(new String[set.size()]); 65 66 long[] longs = new long[setArr.length]; 67 for (int i = 0; i < setArr.length; i++) { 68 longs[i] = Long.parseLong(setArr[i]); 69 } 70 return longs; 71 } 72 73 private String getTo(Long before,Long after){ 74 long bL = before.toString().length(); 75 long aL = after.toString().length(); 76 StringBuilder s= new StringBuilder(); 77 if(bL==aL){ 78 for(int j=0;j<bL;j++){ 79 if(before.toString().charAt(j) != after.toString().charAt(j)){ 80 s.append(after.toString().charAt(j)); 81 } 82 } 83 } 84 return s.toString(); 85 }
身为小白的小弟瑟瑟发抖中,各位大神看到如果有更好的方法,希望多多指导小弟,小弟在此谢过!
浙公网安备 33010602011771号