1

我有很多:

FooModel f = new FooModel();
..
Bar Model b = new BarModel();

我需要从 Java 源代码中检索任何模型对象,但我不想完成声明。我只想要对象声明。

我尝试使用正则表达式(其中 strLine 是 InputStreamReader 中的字符串行):

String pattern = ".*Model (.+)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(strLine);

if(m.find())
    System.out.print(m.group(1) + "\n");

我能够得到实例化。但我会做同样的事情,但对象声明(在“=”之前)。

我怎样才能做到这一点?

我能做到

m.group(0).replace(m.group(1),"");

但这不是真正的正则表达式。

4

2 回答 2

0
(\\w+ \\w+)\\s*=.*new.*Model.*
于 2012-05-16T15:44:48.823 回答
0

如果您在一行中有一个启动语句:

import java.util.regex.*;

class  FindModel
{
    public static void main(String[] args) 
    {
        String s = "  FooModel f = new FooModel();";
        String pattern = "([^\\s]*?Model[^=]*)=";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(s);

        if(m.find())
            System.out.print(m.group(1) + "\n");
     }
}

如果一行中有多个语句:

import java.util.regex.*;

class  FindModel
{
    public static void main(String[] args) 
    {
        String s = "  FooModel f = new FooModel();int i=0,j; BarModel b = new BarModel();";
        String pattern = "([^;\\s]*?Model[^=]*)=.*?;";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(s);

        while(m.find())
            System.out.print(m.group(1) + "\n");
     }
}

输出:

FooModel f
BarModel b
于 2012-05-16T16:34:23.500 回答