0

我正在尝试从文件中读取,然后首先打印偶数元素,然后是奇数行。最好阅读这些行并将它们存储在一个列表中偶数和另一个奇数然后打印每个?或者有没有更有效的方法来解决这个问题?

下面的代码片段是我进行这种排序的方法......截至目前,它只是将输入存储到一个列表中并打印它们。有没有一种有效的方法来打印偶数行后跟奇数行?

public static void test(BufferedReader r, PrintWriter w) throws IOException {

    ArrayList<String> s = new ArrayList<String>();

    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        s.add(line);
        n++;
    }
    Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }
}

提前感谢您的任何帮助/输入!

4

3 回答 3

1

您可以按如下方式更改循环:

while (i.hasNext()) {
    String odd = i.next();
    if (i.hasNext()) {
        String even = i.next();
        w.println(even);
        w.println(odd);
    } else {
        w.println(odd);
    }
}
于 2013-09-22T04:28:56.860 回答
1

好吧,最好的办法是在阅读时打印偶数行,并存储奇数行以供以后打印。

ArrayList<String> s = new ArrayList<String>();

String line;
int n = 0;
while ((line = r.readLine()) != null) {
    if(n % 2 == 0){
        s.add(line);
    }
    else{
        w.println(line);
    }
    n++;
}
Iterator<String> i = s.iterator();
while (i.hasNext()) {
    w.println(i.next());
}

这将是所需空间量的一半。另一种选择可能是将奇数行打印到字符串,然后将该值打印到输出流 - 对于较短的输入可能更有效

于 2013-09-22T04:29:09.950 回答
1

对于小文件,您正在做的事情很好 - 只需遍历您的列表两次打印交替行,第一次通过偶数,第二次赔率。

对于大文件,读取文件两次并像以前一样打印交替行。什么是大文件?这取决于系统。

于 2013-09-22T04:32:40.707 回答