判断数字是否连续,并按指定方式展示

目前有个需求是这样的:

若一个订单中涉及多个票号,显示所有涉及的票号,显示格式如下

例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 }

 

身为小白的小弟瑟瑟发抖中,各位大神看到如果有更好的方法,希望多多指导小弟,小弟在此谢过!

posted on 2018-09-27 09:11  快乐的小易  阅读(396)  评论(0)    收藏  举报

导航