时间合并、周一至周五

有需求如下:

选中连续时间,显示时做合并所选内容。如:
选中:周一、周二、周三、周四、周五
显示:周一至周五
选中:周一、周二、周三、周五、周六
显示:周一至周三,周五至周六
以此类推

代码如下:

	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;
                    // 连续值加1
                    continuous++;
                } else {
                    // 有连续值表示不是开始,有可能连续值是1
                    if (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));
    }

输出结果:

周四,周六至周日
周一至周五
周一
周一至周二,周四至周六
周一至周二,周四至周五,周日
周一至周二,周日
周一,周三,周五,周日
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值