有需求如下:
选中连续时间,显示时做合并所选内容。如:选中:周一、周二、周三、周四、周五显示:周一至周五选中:周一、周二、周三、周五、周六显示:周一至周三,周五至周六以此类推
代码如下:
public static String getNewOpenDay(String openDay) {// 排序规则Map<String, Integer> map = new HashMap<>();map.put("周一", 1);map.put("周二", 2);map.put("周三", 3);map.put("周四", 4);map.put("周五", 5);map.put("周六", 6);map.put("周日", 7);String[] days = openDay.split("、");StringBuilder sb = new StringBuilder();// 是否连续int continuous = 0;// 是否开始节点 如 周一至周五 中的 周一 || 周一, 周三至周六 中的 周三 和 周一boolean first = true;// 定义新数组,重新排序,可按自己的规则进行排序String[] attr = new String[7];for (int i = 0; i < days.length; i++) {attr[map.get(days[i]) - 1] = days[i];}// 遍历新数组拼接字符串for (int i = 0; i < attr.length; i++) {// 当前字符串不为空if (StringUtils.isNotBlank(attr[i])) {// 判断是否是开始节点if (first) {sb.append(attr[i]);// 赋值后不是开始节点first = false;// 连续值加1continuous++;} else {// 有连续值表示不是开始,有可能连续值是1if (continuous > 0) {continuous++;}// 如果是最后一个时间,直接拼接,无需处理if (attr.length-1 == i) {sb.append("至").append(attr[i]);}}} else {// 判断当前字符串是否已拼接过,若没拼接过,无需处理if (StringUtils.isNotBlank(sb.toString())) {// 判断是否是开始节点,若是开始节点也无需处理if (!first) {// 判断是否是连续值,若是连续值,且大于1,则取前一位数值if (continuous > 1) {sb.append("至").append(attr[i-1]);}// 若不是最后一个时间,以逗号分割,重置开始节点值,连续值if (attr.length-1 != i) {sb.append(",");first = true;continuous = 0;}}}}}if (sb.toString().endsWith(",")) {return sb.substring(0, sb.toString().length()-1);} else {return sb.toString();}}public static void main(String[] args) {String a = "周六、周日、周四";System.out.println(getNewOpenDay(a));String b = "周一、周二、周三、周四、周五";System.out.println(getNewOpenDay(b));String c = "周一";System.out.println(getNewOpenDay(c));String d = "周一、周二、周四、周五、周六";System.out.println(getNewOpenDay(d));String e = "周一、周二、周四、周五、周日";System.out.println(getNewOpenDay(e));String f = "周日、周一、周二";System.out.println(getNewOpenDay(f));String g = "周日、周五、周一、周三";System.out.println(getNewOpenDay(g));}
输出结果:
周四,周六至周日周一至周五周一周一至周二,周四至周六周一至周二,周四至周五,周日周一至周二,周日周一,周三,周五,周日
如果觉得《时间合并 周一至周五》对你有帮助,请点赞、收藏,并留下你的观点哦!