gpt4 book ai didi

java - 如何自动或实用地将 java 代码块替换为另一个代码块?

转载 作者:行者123 更新时间:2023-12-02 05:17:15 25 4
gpt4 key购买 nike

我有许多 java 源文件,我想在我的项目中的每个 java 文件中将一个代码块更改为另一个代码块。

例如我的项目有大约 300 个 java 源文件,每个文件都有这个代码块

while (p.getCurrentToken() != JsonToken.END_OBJECT) {
p.nextToken();
field = p.getCurrentName();
obj.populateFromJsonString(field, p);
}

我想把这个代码块替换成

while (p.nextToken() != null) {
field = p.getCurrentName();
if(field!=null){
obj.populateFromJsonString(field, p);
}
}

在所有的java文件中。代码块中的对象obj对于不同的文件是不同的

我知道这可以通过 sed 的文本处理来完成。和 awk .我正在考虑编译器读取和解析 java 源文件的方式的替代解决方案。可能有一些基于这种方式的应用程序可以解决我的问题。

请分享解决此问题的方法或应用。也欢迎基于 sed/awk 的解决方案。

最佳答案

最好使用 IDE 来执行此操作,但如果您真的想使用 sed,请将其放在名为 j.sed 的文件中

/while (p\.getCurrentToken() != JsonToken\.END_OBJECT) {/{
:loop
n
/}/b
s/field = p\.getCurrentName();/if (field!=null) {/
s/p\.nextToken();/field = p\.getCurrentName();/
s/...\.populateFromJsonString(field, p);/\t&\n\t}/
b loop
}

然后在命令行中使用

find . -type f -name '*.java' -exec sed -i.bak -f j.sed {} \;

这将在输入时:

while (p.getCurrentToken() != JsonToken.END_OBJECT) {
p.nextToken();
field = p.getCurrentName();
obj.populateFromJsonString(field, p);
}

输出这个:

while (p.getCurrentToken() != JsonToken.END_OBJECT) {
field = p.getCurrentName();
if (field!=null) {
obj.populateFromJsonString(field, p);
}
}

-i.bak 将就地编辑并将备份存储为 filename.java.bak

关于java - 如何自动或实用地将 java 代码块替换为另一个代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30558571/

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