【问题标题】:Java - Output blocks of n consecutive lines in opposite orderJava - 以相反的顺序输出n个连续行的块
【发布时间】:2021-09-22 03:04:33
【问题描述】:

我想将每 n 个连续行存储到 1 个块中,并以读取它们的相反顺序输出每个块,但在每个块中输出它们的读取顺序。

例如,如果一个块是 2 行连续的,我的输入是:

dog

cat

rabbit

bear

然后会形成两个块,我的输出是:

rabbit

bear

dog

cat

我尝试使用 ArrayList 和计数器来跟踪行数,但我没有得到正确的输出。

  public static void reverseBlock(BufferedReader r, PrintWriter w) throws IOException {
        List<String> list = new ArrayList<String>();   
        
        for(int counter=0; counter<2; counter++){
        
            for (String line = r.readLine();line != null; line = r.readLine()){
                
            list.add(line);
                    
             }
     }
        
        Collections.reverse(list);
        for(String text:list){
        
            w.println(text);
        }
        list.clear();
        
    }
    
    

【问题讨论】:

  • 我要问一个标准问题:你试过什么?你必须让我们知道你在哪里,否则我们不是在回答问题,我们只是在为你编写一个程序。请参阅How to Ask

标签: java list arraylist


【解决方案1】:

假设您有一个名为 input.txt 的文件,其内容如下:

dog
cat
rabbit
bear

也许您可以考虑使用 Deque

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.stream.Stream;

class Main {
  static final String INPUT_FILE_PATH = "input.txt";
  static final int BLOCK_SIZE = 2;

  public static void main(String[] args) throws IOException {
    Deque<Deque<String>> reversedBlocks = new ArrayDeque<>();
    reversedBlocks.addFirst(new ArrayDeque<>());
    try (Stream<String> stream = Files.lines(Paths.get(INPUT_FILE_PATH))) {
      stream.forEach(word -> {
        if (reversedBlocks.getFirst().size() == BLOCK_SIZE) {
          reversedBlocks.addFirst(new ArrayDeque<>());
        }
        reversedBlocks.getFirst().addLast(word);
      });
    }
    reversedBlocks.forEach(words -> words.forEach(System.out::println));
  }
}

输出:

rabbit
bear
dog
cat

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 2020-01-07
    • 2018-06-24
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多