gpt4 book ai didi

java - 使用 JavaParser 更改方法级别的字符串变量

转载 作者:行者123 更新时间:2023-11-29 04:19:27 26 4
gpt4 key购买 nike

我想使用 JavaParser 将 Java 源代码中的所有字符串变量值从任何值更改为 ""

我可以更改全局变量的值,但无法更改方法级变量的值。

环顾四周,我得到了this的帮助和 this答案,现在我可以获得每个方法中每一行代码的值,如下所示:

static void removeStrings(CompilationUnit cu) {
for (TypeDeclaration typeDec : cu.getTypes()) {
List<BodyDeclaration> members = typeDec.getMembers();
if (members != null) {
for (BodyDeclaration member : members) {
if (member.isMethodDeclaration()) { // If it is a method variable
MethodDeclaration method = (MethodDeclaration) member;
Optional<BlockStmt> block = method.getBody();
NodeList<Statement> statements = block.get().getStatements();

for (Statement tmp : statements) {
// How do I change the values here?
}

}
}
}
}
}

现在,如果 tmp 是一个字符串声明,我该如何更改它的值?

最佳答案

你是说这样吗?

static void removeStrings(CompilationUnit cu) {
cu.walk(StringLiteralExpr.class, e -> e.setString(""));
}

测试

CompilationUnit code = JavaParser.parse(
"class Test {\n" +
"private static final String CONST = \"This is a constant\";\n" +
"public static void main(String[] args) {\n" +
"System.out.println(\"Hello: \" + CONST);" +
"}\n" +
"}"
);
System.out.println("BEFORE:");
System.out.println(code);

removeStrings(code);

System.out.println("AFTER:");
System.out.println(code);

输出

BEFORE:
class Test {

private static final String CONST = "This is a constant";

public static void main(String[] args) {
System.out.println("Hello: " + CONST);
}
}

AFTER:
class Test {

private static final String CONST = "";

public static void main(String[] args) {
System.out.println("" + CONST);
}
}

关于java - 使用 JavaParser 更改方法级别的字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279099/

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