• java正则表达式测试用例


    业务需求:

    根据字典值,计算出延后的日志,比如根据字典值,计算出这个api使用期限。

    字典值如下:

     String[] exprs = new String[]{
                "period_90days","period_1year",
                "period_1day","period_2years",
                "period_free1year"
        };

    规则,数字[day[s]|month(s)|year(s)] 即 数字日期单位

    period_数字日期单位(eg.period_1year),表示正常授权

    period_free数字日期单位(eg.period_free1year) 表示有时间限制的免费

    数字随便你填写,他会根据表达式计算时间

    import org.apache.commons.lang3.RegExUtils;
    import org.junit.Test;
    import org.springframework.util.StringUtils;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.function.Predicate;
    import java.util.regex.Pattern;
    
    public class TestRegex {
    
        Pattern pattern = Pattern.compile("period_[\d+day[s]|\d+year[s]]");
        Pattern freePattern = Pattern.compile("period_free[Trial|\d+day[s]|\d+year[s]]");
        String[] exprs = new String[]{
                "period_90days", "period_1year",
                "period_1day", "period_2years",
                "period_free1year"
        };
    
        Pattern noDigitPattern = Pattern.compile("[^0-9]+");
    
    
        @Test
        public void test() {
            Predicate<String> regex = pattern.asPredicate();
    
            Predicate<String> freeRegex = freePattern.asPredicate();
    
    
            int length = exprs.length;
            for (int i = 0; i < length; i++) {
                String expr = exprs[i];
                System.out.printf("%s   匹配结果    %b
    ", expr, regex.test(expr));
            }
    
    
            System.out.println("===================================================");
    
            for (int i = 0; i < length; i++) {
                String expr = exprs[i];
                System.out.printf("%s   匹配结果    免费:%b
    ", expr, freeRegex.test(expr));
            }
    
        }
    
        @Test
        public void testExtractDigit() {
            int length = exprs.length;
    
            String unit = null;
            for (int i = 0; i < length; i++) {
                String expr = exprs[i];
    
                LocalDateTime now = LocalDateTimeNow();
    
                String rawCnt = RegExUtils.removeAll(expr, noDigitPattern);
                if (StringUtils.isEmpty(rawCnt)) {
                    return;
                }
                int offset = expr.indexOf(rawCnt);
                int base_addr = rawCnt.length() + offset;
                unit = expr.substring(base_addr, base_addr + 1);
    
                Integer cnt = Integer.valueOf(rawCnt);
    
    
                switch (unit) {
                    case "y":
                        now = now.plusYears(cnt);
                        break;
                    case "m":
                        now = now.plusMonths(cnt);
                        break;
    
                    case "d":
                        now = now.plusDays(cnt);
                        break;
    
                }
    
                System.out.printf("%s   匹配结果    %s,日期标志:%s,计算后的时间;%s
    ", expr, rawCnt, unit, now.format(DateTimeFormatter.ISO_DATE_TIME));
            }
        }
    }
    public LocalDateTime LocalDateTimeNow() {
        return LocalDateTime.now(ZoneId.of("+8"));
    }

    test方法:运行结果

    testExtractDigit运行结果:

  • 相关阅读:
    js冒泡排序
    HTML5 canvas 计时器
    centos 6.4安装杀毒软件clamAV 0.98[转]
    PHP大文件下载
    如何在 Eclipse 中使用插件构建 PHP 开发环境[转]
    CentOS 单用户模式:修改Root密码和grub加密[转]
    CentOS 6.0 VNC远程桌面配置[转]
    gprof使用介绍 (gcc -pg) [转]
    VMware NAT端口映射外网访问虚拟机linux
    shell判断文件是否存在[转]
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12145197.html
Copyright © 2020-2023  润新知