在空白文件中使用两个扫描仪

时间:2011-07-15 16:19:20

标签: java java.util.scanner

我正在浏览一个文本行之间有空行的.txt文件。

我有一个扫描仪,它接收每一行并将其提供给第二个扫描仪,从该行获取每个单词。

我遇到的问题是,如果我遇到一个空行,第一个扫描程序的空输入为.nextLine()。

我如何确保:

  1. 我还剩下更多的文字(而不仅仅是空行),可能更容易只需要另外一个布尔来检查它。

  2. 如果布尔值检出正常,那么只需跳过那些空行并将第二个扫描程序传递给实际包含文本的行中的文本。

  3. 到目前为止,我的尝试是:

    Scanner one //scans each line from file
    Scanner two //scans each word from scanner one
    
    public boolean more() {
        if (two.more()) {
            return true;
        } else if (one.hasNext()) {
            two = new Scanner(one.nextLine());
            return this.more();
        } else {
            return false;
        }
    }
    
    public String getText() {
        String text = "";
        if(two.hasNext()) {
            text = two.next();
        } else {
            while(!one.hasNext()) {
                one.nextLine();
            }
            two = new Scanner(one.NextLine());
            text = two.next();
        }
        return text;
    }
    

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是修剪从第一个扫描仪获得的线,然后仅在第二个扫描仪不为空时将其传递给第二个扫描仪。例如:

import java.util.Scanner;

public class ScannerTest {
   private static final String TXT = "ScannerTest.txt";

   public static void main(String[] args) {
      Scanner outerScan = 
           new Scanner(ScannerTest.class.getResourceAsStream(TXT));
      while (outerScan.hasNextLine()) {
         String line = outerScan.nextLine().trim();
         if (!line.isEmpty()) {
            Scanner innerScan = new Scanner(line);
            while (innerScan.hasNext()) {
               String nextToken = innerScan.next();
               System.out.println("Token: " + nextToken);
            }
            innerScan.close();
         }
      }
      outerScan.close();
   }
}

在此文件上测试: ScannerTest.txt

Hello world

goodbye world

what the heck

输出:

Token: Hello
Token: world
Token: goodbye
Token: world
Token: what
Token: the
Token: heck