gpt4 book ai didi

java - 从java代码中提取方法调用

转载 作者:行者123 更新时间:2023-12-04 02:46:47 25 4
gpt4 key购买 nike

我想从 java 代码中提取所有方法调用。我写了以下两个正则表达式,但它们无法提取所有方法调用。

Reg1 : Pattern.compile("([a-zA-Z][0-9_a-zA-Z]*\\([a-zA-Z0-9_\\s,\\[\\]\\(\\)\\.]+\\))");

Reg2 : Pattern.compile("([a-zA-Z][0-9_a-zA-Z]*\\([\\s]*\\))")

输入:

"{
if ((war == null) && (config != null)) {
sb.append( &config= );
sb.append(URLEncoder.encode(config,getCharset()));
}
if ((war == null) && (localWar != null)) {
sb.append( &war= );
sb.append(URLEncoder.encode(localWar,getCharset()));
}
if (update) {
sb.append( &update=true );
}
if (tag != null) {
sb.append( &tag= );
sb.append(URLEncoder.encode(tag,getCharset()));
}
}"

输出:

getCharset getCharset getCharset append append append

我无法提取“encode”。

有人知道我应该在正则表达式中添加什么吗?

最佳答案

您需要一个 Java 代码解析器来完成此任务。这是一个使用 Java Parser 的示例:

public class MethodCallPrinter
{
public static void main(String[] args) throws Exception
{
FileInputStream in = new FileInputStream("MethodCallPrinter.java");

CompilationUnit cu;
try
{
cu = JavaParser.parse(in);
}
finally
{
in.close();
}
new MethodVisitor().visit(cu, null);
}

private static class MethodVisitor extends VoidVisitorAdapter
{
@Override
public void visit(MethodCallExpr methodCall, Object arg)
{
System.out.print("Method call: " + methodCall.getName() + "\n");
List<Expression> args = methodCall.getArgs();
if (args != null)
handleExpressions(args);
}

private void handleExpressions(List<Expression> expressions)
{
for (Expression expr : expressions)
{
if (expr instanceof MethodCallExpr)
visit((MethodCallExpr) expr, null);
else if (expr instanceof BinaryExpr)
{
BinaryExpr binExpr = (BinaryExpr)expr;
handleExpressions(Arrays.asList(binExpr.getLeft(), binExpr.getRight()));
}
}
}
}
}

输出:

Method call: parse
Method call: close
Method call: visit
Method call: print
Method call: getName
Method call: getArgs
Method call: handleExpressions
Method call: visit
Method call: handleExpressions
Method call: asList
Method call: getLeft
Method call: getRight

关于java - 从java代码中提取方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com