您能解释一下扫描仪如何工作吗?它可以打印所有内容吗?

时间:2019-04-05 06:01:14

标签: java

我试图了解扫描仪如何工作。因此,我只能扫描文本文档,并且仅通过某些单词进行迭代,但这没有用,它只是打印了所有内容。因此,我用一个只打印数字的循环代替了它,但是它甚至从未打印过,并且即使我没有为此编写打印语句,它也打印了文本文档中的所有单词。 扫描仪会自动打印所有内容吗?为什么也跳过了我的for循环?

Scanner read = new Scanner(new File("Test.txt"));
read.close();
for(int i = 0; i < 5; i++) {
    System.out.println(i);
}

2 个答案:

答案 0 :(得分:0)

请为此修改您的代码:

通用代码:

Scanner reader = new Scanner(new File("Test.txt"));
while (reader.hasNext()){
   String str = reader.nextLine();
   System.out.println(str);
}

reader.close();

用于读取整数:

Scanner reader = new Scanner(new File("Test.txt"));
while (reader.hasNext()){
  int i = reader.nextInt();
  System.out.println(i);
}

reader.close();
  

将Scanner与文本文件一起使用时,其行为有点像   具有集合的迭代器。 hasNext方法检测到结束   文件,因此可以使用简单的while循环来读取文件   数据。

答案 1 :(得分:0)

Scanner并不是一个很好的类,因为在读取时必须确定一个人要读取哪种令牌,并且最好处理所有错误。

它顺序读取文件作为令牌,默认用空格分隔,令牌可以是String/int/...

Scanner in = new Scanner(new File("Test.txt"));
if (in.hasNextLine()) {
    String line = in.nextLine();
}
if (in.hasNextInt()) {
    int n = in.nextInt();
    if (in.hasNext()) {
        String s = in.next();
    }
    if (in.hasNextLine()) {
        in.nextLine();
    }
}
int a = in.nextInt(); // Unsafe - are there digits here?
int b = in.nextInt();
in.close();

对于文件:

My header line
42 fine secret
97 98

一个人很容易犯一个错误。