每个'x'行的txt文件中的行的顺序颠倒 - JAVA

时间:2015-09-21 19:59:34

标签: java reverse

所以我有一个输入txt文件,其中我必须取前50行并反转它的顺序,以便文件将从第50行开始,然后是第49行,直到第1行,然后继续第100行,然后第99届,依旧......

但我最多只能存储50个元素。我不能存储更多。 我到目前为止编写的代码只抓取前50行并将其反转,但我不知道如何继续使用。

这是我到目前为止所做的:

ArrayList<String> al = new ArrayList<String>();
int running = 0;

while(running == 0) {
    for (String line = r.readLine(); line != null; line = r.readLine()) {
        if(al.size() <50 ) {
            al.add(line);
        }
    }
    Collections.reverse(al);
    for (String text : al) {
        w.println(text);
    }

    if(al.size() < 50) {
        break;
    }
    al.clear();
}

idk为什么我的while循环不会继续运行,我只能在输出文件中反转前50行。

2 个答案:

答案 0 :(得分:0)

此:

    for (String line = r.readLine(); line != null; line = r.readLine()) {
        if(al.size() <50 ) {
            al.add(line);
        }
    }

读取文件中的所有行,将前五十行存储在al中,并丢弃其余行。在您处理al的结果之后,您的程序就没有更多内容了:它会读取整个文件。

有一篇关于如何调试小程序的博文,我强烈建议:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/

在您的具体情况下,我建议您将程序分解为函数。其中一个函数将是“读取 n 行,并将它们返回到数组列表中”。这种结构使得更容易推理程序的每个部分。

答案 1 :(得分:0)

您的初始循环:

for (String line = r.readLine(); line != null; line = r.readLine()) {
    if(al.size() <50 ) {
        al.add(line);
    }
}

在将al填充到文件末尾之后继续读取行 - 它只是不将它们放在列表中。

你很可能需要这样的东西:

for (String line = r.readLine(); line != null; line = r.readLine()) {
    if (al.size() == 50)
        outputReverseLines();
    al.add(line);
}
outputReverseLines();

其中outputReverseLines是一种反转,打印和清除列表的方法。