我已经看过类似的主题,但似乎无法拼凑出一个有效的解决方案。我正在编写一个程序(部分)从stdin中读取值以执行某些操作。但是,我打算在运行时重定向文本文件中的输入,所以我不能只使用Ctrl + Z(窗口)发出EOF。
foreach( BoundarySegment s in b )
...
Element neighbour = s.Element;
我似乎永远无法达到最终的打印声明,因为(无论如何我的猜测)似乎hasNextLine()无限期阻塞。
以下是输入文件格式的示例:
String s;
int v2 = 0;
double w = 0;
int v1 = 0;
int i = 0;
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
s = sc.nextLine();
String[] arr = s.trim().split("\\s+");
v1 = Integer.parseInt(arr[0]);
v2 = Integer.parseInt(arr[1]);
w = Double.parseDouble(arr[2]);
i++;
}
System.out.println(i);
sc.close();
它始终采用int int double的格式,但它们之间的间距可以变化,因此字符串操作也是如此。它也总是以-1结束。
我尝试过以下无效
0 1 5.0
1 2 5.0
2 3 5.0
3 4 5.0
4 5 5.0
12 13 5.0
13 14 5.0
14 15 5.0
...
-1
我遗漏了大部分与避免混乱无关的代码。如果需要,我可以发帖。
谢谢你看看。
编辑:编辑清晰。还注意到它挂在输入文件的最后一行而不管行内容(即有效行挂起)。我通过eclipse(Neon)重定向。
答案 0 :(得分:0)
你的代码似乎运作良好。虽然你可以检查hasNextLine以及如果自定义EOF,检查其他一些条件(在你的情况下有-1)。如果您的代码容易出现,您可能会遇到一些异常。下面的代码对我来说效果很好。
Scanner scanner = new Scanner(new File("/opt/test.txt"));
int secondValue = 0;
double lastValue = 0;
int firstValue = 0;
int LineNumber = 0;
while ((scanner.hasNextLine()) ) {
try {
String[] arr = scanner.nextLine().trim().split("\\s+");
firstValue = Integer.parseInt(arr[0]);
secondValue = Integer.parseInt(arr[1]);
lastValue = Double.parseDouble(arr[2]);
doSomeThing(firstValue,secondValue,lastValue);
LineNumber++;
} catch (Exception excep) {
}
}
System.out.println(LineNumber);
}