有這樣的需求,需要合併消息,本來打算自定義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); } } } }