連續的數值,數據合併

 有這樣的需求,需要合併消息,本來打算自定義mysql函數來實現這功能,但感覺比較繁瑣,最後改用代碼實現。

 最終要實現的效果爲:例如6號窗口,7號窗口,10號窗口,11號窗口  變爲 6-7號窗口,10-11號窗口

 

最後果斷上代碼:

package com.expo.testDemo;

import cn.hutool.core.util.StrUtil;

import java.util.Arrays;

public class Ceshi {

    public static void main(String[] args) {
        String text="31號窗口,30號窗口,32號窗口,33號窗口,34號窗口,35號窗口,36號窗口,37號窗口,46號窗口,47號窗口,48號窗口,49號窗口,50號窗口,51號窗口,52號窗口,53號窗口,54號窗口,55號窗口,56號窗口,57號窗口,58號窗口";
        String text1="稅務預審窗口";
        if(StrUtil.contains(text,',')){
            String dd=StrUtil.replace(text,"號窗口","");
            String[]  ss= StrUtil.split(dd,",");
            int[] array = Arrays.asList(ss).stream().mapToInt(Integer::parseInt).toArray();
            Arrays.sort(array);
            String result = convert(array, 0);
            System.out.println(StrUtil.sub(result,0,result.length()-1));
        }else{
            System.out.println("你毛都沒有");
        }
    }

    public static String convert(int[] ints, int index) {
        int end = index;
        if (ints.length == index) {
            return "";
        } else {
            for (int i = index; i < ints.length; i++) {
                if (i < ints.length - 1) {
                    if (ints[i] + 1 == ints[i + 1]) {
                        end = i;
                    } else {
                        if (i > index)
                            end = end + 1;
                        break;
                    }
                } else {
                    if (end == ints.length - 2) {
                        end = ints.length - 1;
                        break;
                    }
                }
            }
            if (index == end) //相等說明不連續
                return ints[index] + "號窗口," + convert(ints, end + 1);
            else{
                return ints[index] + "-" + ints[end] + "號窗口," + convert(ints, end + 1);
            }
        }
    }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章