用于标识输入文本文件中的循环和方法的 Java 代码

A java code that identifies the loops and methods in an input text file

提问人:omarAlsrouji 提问时间:6/12/2022 最后编辑:omarAlsrouji 更新时间:6/14/2022 访问量:220

问:

我在编写成功的代码时遇到了麻烦,该代码可以识别输入文本文件中的循环(for 循环、while 循环、嵌套 for 循环)(此输入是使用 BufferedReader 获取的)和方法,其中输出应如下所示:

(for 从 X 线到 X 线的循环)

(while 从 x 线循环到 x 线)

(方法 xxx 从第 x 行到第 x 行)

我首先创建一个文件夹,其中包含一个文本文件,其中包含一个随机代码(在我的情况下,它是一个气泡排序),代码有注释,所以我使用 replaceAll 正则表达式删除了所有注释,没有注释的输出被写入另一个 .txt 文件,然后,我使用 BufferedReader 读取新的 txt 文件并将其存储在 ArrayList 中, 这就是我卡住的地方,我尝试了几个 if 语句以找到 for 循环作为开始。我的问题是我怎样才能获得我上面写的所需输出?

   package assignment1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

public class tryq3 {
    public static void main(String a[]) throws Exception {
        String fileName = "C://myFolder//output.txt";
        Question1 DDD = new Question1();
        String source = DDD.readFile(fileName);
        String sourceNoBrackets = source.replaceAll("\\(.*\\)", "");
        
        File file1 = new File("C:\\myFolder\\cleanOutput1.txt");
        FileWriter fw = new FileWriter(file1);
        PrintWriter pw = new PrintWriter(fw);
        pw.println(sourceNoBrackets);
        pw.close();
        
        String line;
        int counter = 0;
        ArrayList<String> mylist = new ArrayList();
    
        BufferedReader br = new BufferedReader(new FileReader("C:\\myFolder\\cleanOutput1.txt"));
        while((line = br.readLine())!=null) {
            mylist.add(line);
        }
        
        for(int i=0;i<mylist.size();i++) {
            int count=0;
            if(mylist.get(i).contains("for")) {
                System.out.println("for loop from " + i);
                
            }
            
            
                
        }
            
            
    }
        
        
        
}
Java 循环 ArrayList 方法 预处理器

评论

0赞 Dave Newton 6/12/2022
什么样的问题?你用的是什么解析器?
0赞 omarAlsrouji 6/12/2022
只是一个普通的控制台问题,没什么太复杂的,我不明白你说我使用的是什么解析器是什么意思。
0赞 Gilbert Le Blanc 6/12/2022
您的输入文件是什么样的?你的输出应该是什么样子的?
0赞 omarAlsrouji 6/12/2022
我的输入是一个随机的 Java 代码(例如冒泡排序或插入排序),输出如下所示:(for 从 X 行到 X 行的循环)(while 从 X 行到 X 行的循环)(方法 xxx 从 X 行到 X 行),
0赞 Dave Newton 6/12/2022
您尚未描述您遇到的问题/问题/困难。通过“什么解析器”,我的意思是你如何解析代码。

答:

0赞 Doga Cobanoglu 6/12/2022 #1

我建议一旦找到单词,不要只列出行,而是找到左括号的开始位置和结束位置。您可以对 while 循环和方法执行相同的操作。您需要捕获嵌套 for 循环的情况;如果找到,则再次重新启动进程,并首先在内部声明 for 循环,然后声明外部循环。希望能有所帮助!for{}for{for

for(int i=0;i<mylist.size();i++) {
        int count=0;
        if(mylist.get(i).contains("for") && mylist.get(i).contains("{")) {
            for(int j=i;j<mylist.size();j++) {
               if(mylist.get(j).contains("}"){
                   System.out.println("for loop from " + i);
                   i = j; // begin from where j left off
               }
               if(mylist.get(j).contains("for") && mylist.get(j).contains("{"){ // nested loop
                   for(int k=j;k<mylist.size();k++) {
                        if(mylist.get(k).contains("}"){
                             System.out.println("for loop from " + i);
                             j = k; // begin from where k left off
                        }
                   }
               
               }
            }
            
        }

}

评论

0赞 omarAlsrouji 6/12/2022
你说的很有道理,但老实说,我很难理解你所说的代码,你能帮我写代码吗?如果我让“for”循环工作,我就可以处理“while”循环和方法。
0赞 Doga Cobanoglu 6/14/2022
当然,我会尝试添加另一个关于如何编写代码的答案
0赞 omarAlsrouji 6/15/2022
我修改了这段代码并得到了我想要的输出,感谢您的帮助。