0

我正在尝试从 Java 源文件中提取单词短语。例如我有一个简单的源类

class TestClass implements TestInterface implements TestInterface2 {

}

class TestClass2 {

}

我想提取“类TestClass”和“类TestClass2”。我尝试了不同的正则表达式模式,但找不到解决方案

我的测试代码spinet:-

public static void wordPhraser(String sourceText) {

    Pattern p = Pattern.compile("class(\\s+)([a-zA-Z]*)");
    Matcher m = p.matcher(sourceText);
    while (m.find()) {
        System.out.println("output " + m.group());
    }
}

还尝试过:-

"class\\s*([a-zA-Z])"
"class\\s*[a-zA-Z]"
"^class\\s+[a-zA-Z]$"

这些都不起作用。

谢谢。

4

2 回答 2

2

这是我使用的正则表达式:

(final|abstract|\n|^) {0,}class {1,}.{1,} {0,}\\{

不过,这也将获得包括工具/接口在内的测试。这是我用来解析它们的代码,只需获取类名:

        String match = m.group();//m is my matcher for the regex
        String s = match.substring(match.indexOf("class ") + "class ".length(), match.lastIndexOf("{")).trim();
        if(s.contains("extends"))
            s=s.substring(0, s.indexOf("extends"));
        if(s.contains("implements"))
            s=s.substring(0, s.indexOf("implements"));
        s=s.trim();
        strings.add(s);

注意:这不适用于公共或私有类,仅适用于具有简单 final/abstract 修饰符的类

于 2012-07-24T19:02:41.307 回答
2

我不敢说它们有效,但还有改进的余地:

\bclass(\s+)([a-zA-Z_]\w*)\b

是一个更好的正则表达式。你没有匹配数字。

当然,这就是你应该在 Java 中使用它的方式:

String regex = "\\bclass(\\s+)([a-zA-Z_]\\w*)\\b";

匹配更多:

\b((public|private|protected|static|abstract|final)\s*)*class(\s+)([a-zA-Z_]\w*)\b

演示:

在此处输入图像描述

于 2012-07-24T19:02:42.163 回答