我目前正在编写一个递归下降解析器。代码目标是告诉字符串是否在语言中。我需要读取一个包含多个字符串的文件(每行一个字符串)。目前它只适用于文件中的第一个字符串,然后写入控制台..我遇到了正确执行此问题,并使其读取EACH行而不是第一个的问题。任何帮助赞赏。 (可能有不同的方法来处理这个问题,比如重写很多代码就足够了......但我现在只是寻找简单的解决方案)
问题所在代码的顶部:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main
{
static int ptr;
static char[] input;
public static void main(String[] args)
{
String str="";
BufferedReader br = null;
FileReader fr = null;
try {
fr = new FileReader("input.txt");
br = new BufferedReader(fr);
br = new BufferedReader(new FileReader("input.txt"));
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
input = str.toCharArray();
if(input.length < 2)
{
System.out.println("The string '"+str+"' is not in the language.");
System.exit(0);
}
ptr = 0;
boolean isValid = E();
if((isValid) & (ptr == input.length))
{
System.out.println("The string '"+str+"' is in the language.");
}
else
{
System.out.println("The string '"+str+"' is not in the language.");
}
}
static boolean E()
{
int fallback = ptr;
if(input[ptr++] != '|')
{
ptr = fallback;
return false;
}
if(P() == false)
{
ptr = fallback;
return false;
}
if(O() == false)
{
ptr = fallback;
return false;
}
return true;
}
答案 0 :(得分:1)
如果可以使用java8那么为什么不使用java nio来读取所有行? https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio.file.Path-java.nio.charset.Charset-
答案 1 :(得分:0)
您应该如下所示读取循环中的行,然后在控制台中打印。
while((str = br.readLine())!= null){
//在此处编写其余代码以将其转换为char数组并将其打印到控制台
}