开发者社区> 问答> 正文

在java中使用正则表达式匹配时代码卡住不往下走?报错

我在hibernate环境中想遍历hibernate.cfg.xml中的所有的类,然后将我想要的某些类的打印出来,我使用正则表达式处理这个过程,但是我在测试的时候发现,这段程序会在matcher.find()这个方法上卡住,然后u后台资源就会占用非常大,而且程序不再往下走,也不报错,这是为什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
publicvoidgetTest() {
 
        List<String> list = getAllClassNameFromModule("privilege");
        for(String Str : list) {
            System.out.println(Str);
        }
    }
 
    /**
     * 获取所有的类的信息
     *
     * @return map<String ,ClassMetadata> String 为类名的全称 ; ClassMetadata为类的信息
     */
    privatestaticMap<String, ClassMetadata> getAllClassMetaData() {
        returnHibernateUtil.getSessionFactory().getAllClassMetadata();
    }
 
    publicstaticList<String> getAllClassNameFromModule(String moduleValue) {
        List<String> list =newArrayList<String>();
        Map<String, ClassMetadata> map = getAllClassMetaData();
        String test ="^(\\w+.)+("+ moduleValue +".){1}(\\w+.)+$";
        Pattern pattern = Pattern.compile(test);
        Iterator<String> iterator = map.keySet().iterator();
        while(iterator.hasNext()) {
            String classNam = iterator.next();
            Matcher matcher = pattern.matcher(classNam);
            if(matcher.find()) {
                intindex = matcher.group().lastIndexOf(".");
                list.add(matcher.group().substring(index +1));
                /* System.out.println(matcher.group().substring(index+1)); */
            }
        }
        returnlist;

    }

我测试了一下,发现是以下的原因造成的,matcher.find(),当它要匹配的字符串数量超过五条以上且要匹配的字符串的差别稍微大点,就会造成程序在这个方法上运行很慢(结果会运行数来),那位大神有好的解决办法?

展开
收起
爱吃鱼的程序员 2020-06-14 16:41:07 1468 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    1.正则效率本来就低,可以考虑换成单独处理的方法,不要正则.

    2...你的用法很逗比...都用正则了,为什么还要 lastIndexOf  substring....

    难道你已经复杂到捕获组也实现不了了?

    仅仅通过从配置文件里获取的是实体类的全路径,而我用的时候只需要它的实体类名即可,所以我要切一下,至于你说的那个单独处理的方法是什么方法?

    楼主你好,我最近也遇到了这个问题,匹配就卡死,你是怎么解决的?

    原则上最好别用正则表达式,效率很低。
    2020-06-14 16:41:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载