读取未空格整数的文件 - hasNextInt()永远不会返回true

时间:2017-05-10 16:13:39

标签: java java.util.scanner bufferedreader filereader java-io

我正在尝试从文件中读取一些未空格的整数,我无法弄清楚为什么我的while循环中没有超过条件。

这是整个“nums.txt”文件:

12121212121212121212121212121212
00001212121212121212121212121212
33331212121212121212121212121212

小脚本看起来像这样:

import java.util.Scanner;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;

public class Test{
  public static void main(String[] args){
    try{
      Scanner reader = new Scanner(new BufferedReader(new FileReader(new File("nums.txt"))));
      while(reader.hasNextInt()){
        System.out.println(reader.nextInt());
      }
     reader.close()
    }
    catch(FileNotFoundException e){
        e.printStackTrace();
    }
  }
}

运行时,不输出任何内容,并终止。

3 个答案:

答案 0 :(得分:3)

根据其JavaDoc Scanner.hasNextInt()

  

如果使用nextInt()方法可以将此扫描器输入中的下一个标记解释为默认基数中的int值,则返回true。

12121212121212121212121212121212是下一个标记,它不能被解释为int,因为最大int是2147483647。

因此hasNextInt()返回false,您的循环结束。

Scanner本质上适用于由分隔符(默认为空格)分割的标记。如果您想一次使用一个字符,请使用Reader.read()甚至InputStream.read()

答案 1 :(得分:0)

这样的事情对你有用。确保对生成的每个int执行某些操作,否则您将松开它。

BufferedReaderreader = new new BufferedReader(new FileReader(new File("nums.txt")));

while ((currentChar = br.read()) != null) {
    // discard white space
    if (!java.lang.Character.isWhitespace(currentChar))
            int x = Integer.parseInt(currentChar)
            // do something with the int
}

答案 2 :(得分:0)

这个问题的功能性解决方案,通过读取字符并返回文件中的值:

  BufferedReader reader = new BufferedReader(new FileReader(new File("nums.txt")));
    while(reader.read()%48 != -1){
      System.out.println(reader.read()%48);
    }

由于该文件可能包含换行符和其他字符,因此需要进行额外的解析才能在返回时仅接受所需的数字。

或使用扫描仪:

  Scanner reader = new Scanner(new File("nums.txt"));
    while(reader.hasNextLine())
    for (String token : reader.nextLine().split("(?!^)"))
        System.out.println(token);