3

我正在编写一个编译器程序来读取文本文件。文本文件中的一些命令会告诉我跳回文本文件中的某一行并从那里读取。事实上,这段代码我一次读取一行,直到文档结束。无论如何让解析器向后或向前跳到文本文件中的某一行?假设我目前在第 8 行,指令是返回并阅读第 4 行?

这是我解析文件的代码。

try {
    FileInputStream fstream = new FileInputStream("compilers.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;

    while ((strLine = br.readLine()) != null && checker == false) {
        // rest of code in here
    }
    in.close();
}
4

2 回答 2

2

有 Streammark()reset()函数,但使用BufferedStreams 时可能会失败。最好将整个文件读入一个ArrayList,每行一个条目。

ArrayList 的示例:

List<String> lines = new ArrayList<String>();
while ((strLine = br.readLine()) != null) {
    lines.add(strLine);
}

// later get line by:
// first line has index 0    
String line = lines.get(8);  
于 2012-12-12T18:27:12.280 回答
1

你可以这样做Map

HashMap<Integer, String>

键是您的行号,值是您的行。因此,您可以在需要时逐行获取。

Map<Integer, String> lineMap = new HashMap<Integer, String>();
int i = 1;
while ((strLine = br.readLine()) != null && !checker) {
    lineMap.put(i, strLine);
    // do what you want
    // if you are in line 8 (i=8)
    // get my line 4 (lineMap.get(4))
    i++;
}
于 2012-12-12T18:31:03.267 回答