使用扫描仪回显文本文件并使其间隔两倍?

时间:2013-04-10 22:29:04

标签: java

我必须创建一个EchoDouble类,它扩展了Echo类,它将文本文件回显到控制台。

该文本文件的内容是

Nature's first green is gold, 
Her hardest hue to hold. 
Her early leaf's a flower; 
But only so an hour. 

但我正在尝试编辑EchoDouble类中的processLine方法,以便它将像这样双回发回文本文件

Nature's first green is gold, 

Her hardest hue to hold. 

Her early leaf's a flower; 

But only so an hour. 

回声等级

 import java.util.Scanner;
 import java.io.*;

    public class Echo{
      String fileName; // external file name
      Scanner scan; // Scanner object for reading from external file

      public Echo(String f) throws IOException
      {
        fileName = f;
        scan = new Scanner(new FileReader(fileName));
      }

      // reads lines, hands each to processLine
      public void readLines(){
        while(scan.hasNext()){
          processLine(scan.nextLine());
        }
        scan.close();
      }

      // does the real processing work
      public void processLine(String line){
        System.out.println(line);
      }
    }

EchoDouble Class

import java.io.*;

public class EchoDouble extends Echo
{
  public EchoDouble (String datafile) throws IOException
  {
    super(datafile);
  }

  // Prints the given line and inserts a blank line
  // Overrides the processLine method in Echo class
  public void processLine(String line)
  {
    /* **code here** */
  }
}

我是java中的回声和扫描程序的新手,我坚持这个问题。如果有人能就如何解决这个问题给我任何建议,我们将不胜感激!

3 个答案:

答案 0 :(得分:2)

这个怎么样:

@Override
public void processLine(String line){
     System.out.println(line);
     System.out.println();
}

答案 1 :(得分:2)

最简单的事情是:

public void processLine(String line) {
  System.out.println(line);
  System.out.println();
}

但是这会在最后给你一个额外的空行。可替代地,

public void processLine(String line) {
  System.out.println();
  System.out.println(line);
}

会在开头给你一个额外的空行。所以你需要一个关于它是否是第一行的概念。

您可以将这些知识放在processLine

private boolean printedAnythingYet = false;
public void processLine(String line) {
  if (printedAnythingYet) {
    System.out.println();
  }
  System.out.println(line);
  printedAnythingYet = true;
}

或在readLines

public void readLines() {
  boolean isFirstLine = true;
  while (scan.hasNext()) {
    processLine(scan.nextLine(), isFirstLine);
    isFirstLine = false;
  }
  scan.close();
}

public void processLine(String line, boolean isFirstLine) {
  if (!isFirstLine) {
    System.out.println();
  }
  System.out.println(line);
}

我不确定哪些我更喜欢。说实话,我认为processLine不应该是public

答案 2 :(得分:1)

执行:

public void processLine(String line){
     System.out.println("\n" + line);
}

\ n是创建新行的原因,然后它回应。