我试图从文件中读取,然后首先打印偶数元素,然后是奇数行。是最好读取行并将它们存储在一个列表中,偶数和另一个是奇数然后打印每个?或者有更有效的解决方法吗?
下面的代码片段是我正在进行此排序的方法...截至目前,它只是将输入存储到列表中并打印它们。是否有一种有效的方法来打印偶数字的单词后跟奇数行?
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());
}
}
提前感谢任何帮助/输入!
答案 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)
对于小文件你正在做的事情很好 - 只需在你的列表上重复两次打印替代线,第一次传球时均匀,第二次传输赔率。
对于大文件,请读取文件两次并像以前一样打印备用行。什么是大文件?这取决于系统。