从文件中打印偶数行和奇数行

时间:2013-09-22 04:19:38

标签: java list sorting data-structures

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

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

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());
    }
}

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

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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());
}

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

答案 2 :(得分:1)

对于小文件你正在做的事情很好 - 只需在你的列表上重复两次打印替代线,第一次传球时均匀,第二次传输赔率。

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