读取无间隔整数的文件 – hasNextInt() never returns true
Reading file of unspaced integers – hasNextInt() never returns true
我正在尝试从一个文件中读取一个无间隔整数列表,但我不明白为什么我在我的 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();
}
}
}
当运行时,这什么都不输出,并终止。
像这样的东西应该适合你。确保对生成的每个 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()
:
Returns true if the next token in this scanner's input can be interpreted as an int value in the default radix using the nextInt() method.
12121212121212121212121212121212
是下一个token,不能解释为int,因为int最大为2147483647。
因此 hasNextInt()
returns false
,循环结束。
A Scanner
本质上适用于由分隔符分隔的标记(默认情况下,space)。如果您想一次使用一个字符,请使用 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);
我正在尝试从一个文件中读取一个无间隔整数列表,但我不明白为什么我在我的 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();
}
}
}
当运行时,这什么都不输出,并终止。
像这样的东西应该适合你。确保对生成的每个 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()
:
Returns true if the next token in this scanner's input can be interpreted as an int value in the default radix using the nextInt() method.
12121212121212121212121212121212
是下一个token,不能解释为int,因为int最大为2147483647。
因此 hasNextInt()
returns false
,循环结束。
A Scanner
本质上适用于由分隔符分隔的标记(默认情况下,space)。如果您想一次使用一个字符,请使用 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);