提问人:omarAlsrouji 提问时间:6/12/2022 最后编辑:omarAlsrouji 更新时间:6/14/2022 访问量:220
用于标识输入文本文件中的循环和方法的 Java 代码
A java code that identifies the loops and methods in an input text file
问:
我在编写成功的代码时遇到了麻烦,该代码可以识别输入文本文件中的循环(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);
}
}
}
}
答:
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
我修改了这段代码并得到了我想要的输出,感谢您的帮助。
评论