【问题标题】:Using scanner for a multi-line text file使用扫描仪处理多行文本文件
【发布时间】:2015-02-10 05:50:28
【问题描述】:

我正在开发一个读取文本文件的程序。我必须为文件的每一行执行一个单独的方法。我可以这样做:

LineNumberReader myReader = new LineNumberReader(new FileReader("filename"));

Scanner scanner = new Scanner(myReader.readLine());
while (scanner.hasNext()) { ... }

并将后两行放在一个循环中,这样我就可以解析每一行的标记。但我想知道是否有任何方法可以做到这一点,而无需在每次迭代时都实例化一个新的扫描仪对象。

【问题讨论】:

  • 你可以直接使用Scannerclass。

标签: java java.util.scanner


【解决方案1】:

用一个扫描仪读取每一行的 Java 代码:

Scanner myScanner = new Scanner(new File("filename"));
while (myScanner.hasNextLine())
{
   String line = myScanner.nextLine();
    ...
}

【讨论】:

    【解决方案2】:

    可以将Reader和Scanner结合起来,只需将Reader传入Scanner,然后循环

    LineNumberReader myReader = new LineNumberReader(new FileReader("filename"));
    
    Scanner myScanner = new Scanner(myReader);  // <== scanner uses Reader
    while (myScanner.hasNextLine()) {
        String line = myScanner.nextLine();
    }
    

    【讨论】:

    • 我喜欢你的评论 ;)
    【解决方案3】:

    @Max Zoome 的示例是一个很好的方法,但它有一个问题是这个循环会转到infinite 所以我建议你使用以下版本:

    String line;
    while (myScanner.hasNextLine() && (line=myScanner.nextLine()!=null))
    {
       // Do whatever you want to do 
    }
    

    替代方案

    当你想读取文件line by line时使用BufferedReader是一个不错的方法,

    因为Scanner 用于从流的内容中解析标记,而BufferedReadersynchronizedScanner 不是。

    FileReader in = new FileReader("yourFileName");
    BufferedReader br = new BufferedReader(in);
    
    while ((line=br.readLine()) != null) {
        System.out.println(line);
    }
    in.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多