Java 读取无空格整数的文件–;hasNextInt()永远不会返回true
我试图从一个文件中读取一个无空格的整数列表,但我不明白为什么我在while循环中从未通过该条件 这是整个“nums.txt”文件: 小脚本如下所示:Java 读取无空格整数的文件–;hasNextInt()永远不会返回true,java,java.util.scanner,bufferedreader,filereader,java-io,Java,Java.util.scanner,Bufferedreader,Filereader,Java Io,我试图从一个文件中读取一个无空格的整数列表,但我不明白为什么我在while循环中从未通过该条件 这是整个“nums.txt”文件: 小脚本如下所示: import java.util.Scanner; import java.io.File; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileNotFoundException; public class Test{ public sta
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();
}
}
}
运行时,这不会输出任何内容,并会终止。类似的操作应该适合您。确保对生成的每个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
}
像这样的东西应该适合你。确保对生成的每个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
}
根据它的JavaDoc
Scanner.hasNextInt()
:
如果可以使用nextInt()方法将此扫描仪输入中的下一个标记解释为默认基数中的int值,则返回true
1212121212
是下一个标记,不能解释为int,因为最大int为2147483647
因此hasnetint()
返回false
,循环结束
扫描器
就其性质而言,可以处理由分隔符(默认情况下为空格)分割的令牌。如果您想一次使用一个字符,请根据其JavaDocScanner.hasNextInt()
使用Reader.read(),甚至使用InputStream.read()
:
如果可以使用nextInt()方法将此扫描仪输入中的下一个标记解释为默认基数中的int值,则返回true
1212121212
是下一个标记,不能解释为int,因为最大int为2147483647
因此hasnetint()
返回false
,循环结束
扫描器
就其性质而言,可以处理由分隔符(默认情况下为空格)分割的令牌。如果您想一次使用一个字符,请使用Reader.read()
甚至InputStream.read()
一种解决此问题的功能解决方案,方法是读取字符并返回文件中的值:
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);
此问题的功能解决方案,通过读取字符并返回文件中的值:
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);
你怎么知道一个数字何时结束,下一个数字何时开始?它们都只是个位数吗?如果是这种情况,请使用读取字符的方法,并将字符转换为int。这就是我所决定的,但它似乎太迟钝了,我想知道是否有更好的方法…我想这是一个比我所问的更具体的问题。谢谢你怎么知道一个数字何时结束,下一个数字何时开始?它们都只是个位数吗?如果是这种情况,请使用读取字符的方法,并将字符转换为int。这就是我所决定的,但它似乎太迟钝了,我想知道是否有更好的方法…我想这是一个比我所问的更具体的问题。谢谢很好的回答,但是用hasNextByte()和nextByte()替换hasNextInt()和nextByte(),并没有改变功能–程序仍然不输出任何内容并终止。抱歉,我犯了与您相同的错误,没有阅读文档nextByte()
解析数字字符串的方式与nextInteger()
完全相同。我已经编辑了。答案很好,但是用hasNextByte()和nextByte()替换hasNextInt()和nextByte(),并没有改变功能–程序仍然不输出任何内容并终止。抱歉--我犯了与您相同的错误,没有阅读文档nextByte()
解析数字字符串的方式与nextInteger()
完全相同。我编辑过。