gpt4 book ai didi

java - 源代码解析和格式化

转载 作者:行者123 更新时间:2023-12-01 09:42:09 25 4
gpt4 key购买 nike

问题:

  1. 读取源代码文件(例如.java)
  2. 从中删除所有空行
  3. 删除其中的所有评论
  4. 删除循环之间不必要的空格
    示例

    for ( int i = 0, int j = 0   ; i < = data.length, j   <  44; i++ , j++) 

    变成

    for(int i=0,int j=4;i<=data.length,j<44;i++,j++)
  5. 更改大括号:

    void sleep(){
    return;
    }

    void sleep()
    {
    return;
    }

我已经为 13 创建了使用正则表达式的函数。

但是对于4,我编写了一个单独的 String fixFor (String forCode) 函数,并且我必须手动修改所有 for。
有谁知道一个编程解决方案,即 Java 程序可以在不使用文本编辑器的查找和替换功能的情况下执行此操作?我正在使用以下方法将源代码文件读入字符串:

    String s=new String(readAllBytes(get("Code.java")));

同样对于5,很容易替换所有{{\n但随后缩进不再有效。

最佳答案

这个问题有点模糊,因为我不确定解决方案代码是否只是简单地使用带有宏的文本编辑器,或者您是否需要它的 Java 源代码。

对于 4,您可以使用模式来迭代该行,并从您正在解析的任何语言的关键字列表中查找实例,然后随后处理找到的任何组,无论这意味着替换字符串中的组还是复制它们并重组原始字符串,仅保留匹配的组不被修改:

/*
* StackOverflow example
*
*
*/
package javaapplication5;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
*
* @author dean2191
*/
public class JavaApplication5 {

public static void main(String[] args) {
String code = "for ( int i = 0, int j = 0 ; i < = data.length, j < 44; i++ , j++) ";
List yourKeywords = new ArrayList();
yourKeywords.add("int");
yourKeywords.add("boolean"); //any keywords,could read them from a file
Iterator<String> iterator = yourKeywords.iterator();

Pattern pattern = Pattern.compile("(" + iterator.next() + "\\s"+"[a-zA-Z0-9]" + ")");
Matcher m = pattern.matcher(code);

while (iterator.hasNext()) {

if (m.find()) {
System.out.println("group to keep found:"+m.group());
}
}
}

}

此代码的输出将是:

group to keep found:int i
group to keep found:int j

如上所述,您可以复制该组并生成一个新字符串,确保这些组是唯一未删除空格的部分(如果这是您真正想要的)。

但是,根据您实际想要对某种语言进行多少解析,可能值得考虑诸如 ANTLR 之类的解决方案。以获得更强大的解析解决方案。

关于java - 源代码解析和格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38368980/

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