import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class Test
{
public static void main (String args[]) throws java.io.IOException
{
Scanner s = new Scanner(new File("filepath"));
ArrayList<Integer> list = new ArrayList<Integer>();
while (s.hasNext()){
if(s.hasNextInt()){
list.add(s.nextInt());
}
}
s.close();
System.out.println(list);
}
}
我正在尝试从每行具有以下格式的文本文件中只读取整数:文本整数文本。
这是我到目前为止所做的,但是当我编译并运行时,无论出于什么原因打印永远不会结束[]。
请注意,我更改了文件路径只是为了将其上传到此处,这不是问题。
答案 0 :(得分:3)
当我编译并运行时,它打印永不结束
这个循环是罪魁祸首:
while (s.hasNext()){
if(s.hasNextInt()){
list.add(s.nextInt());
}
}
考虑扫描程序hasNext
时会发生什么,但无论下一个标记是什么,它都不是int
。在这种情况下,你的循环变得无限,因为循环的主体不消耗任何东西,使扫描器处于与循环开始时完全相同的状态。
要解决此问题,请向else
添加if
,阅读s.next()
,然后忽略结果:
while (s.hasNext()){
if(s.hasNextInt()){
list.add(s.nextInt());
} else {
s.next();
}
}
答案 1 :(得分:0)
试试这个:
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class Test
{
public static void main (String args[]) throws java.io.IOException
{
Scanner s = new Scanner(new File("filepath"));
ArrayList<Integer> list = new ArrayList<Integer>();
while (s.hasNext()){
list.add(s.nextInt());
s.nextLine(); // Eat the next line
// Remove the conditional if statement to eat the new line
}
System.out.println(list);
s.close();
}
}
你必须指示读者头移过该行,然后 hasNext()函数将确定是否有任何新内容。
答案 2 :(得分:0)
问题在于此块
while (s.hasNext()){
if(s.hasNextInt()){
list.add(s.nextInt());
}
}
为了阅读指定的格式,您应该做的是:
while (s.hasNext()){
String line = s.nextLine();
String[] content = line.split(" ");
list.add(Integer.parseInt(content[1]));
}
希望这有帮助。