while (myFile.hasNextLine()) {
if(myFile.next().equals("Oval")) {
System.out.println("this is an Oval");
}
else if(myFile.next().equals("Rectangle")) {
System.out.println("this is an Rectangle");
}
的文件包含以下
椭圆形10 10 80 90红
椭圆形20 20 50 60蓝
矩形10 10 100 100绿色
我想提取数据并根据行开头指明的类型将它们传递给特定的构造函数。
,但我得到这个奇怪的输出
这是一个椭圆形 异常线程“main” java.util.NoSuchElementException 这是一个矩形 在java.util.Scanner.throwFor(扫描仪。 java:907) 这是一个Rectangle 位于Test.Main.main上的java.util.Scanner.next(Scanner.java:1416) (sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.intellij.rt.execution.application.AppMain.main( AppMain.java:134)
过程完成,退出代码为1
要么调用'下一个()'和nextLine()后''扔掉该行,因为OP只检查“椭圆形”和“矩形”或拆分字符串并采取第一部分。 –
非常感谢我不知道这一点,还有一个想法是如何摆脱'NoSuchElementException',不应该使用'hasNextLine()'来遍历文件? – RootOfMinusOne
@RootOfMinusOne:只要它能正常工作并遵守文件结构,您可以通过任何方式遍历文件。我经常使用基于文件的扫描器通过'hasNextLine()'''nextLine()'获取每一行,然后使用单独的基于字符串的扫描器来提取行中的单个标记。但是如果你走这条路线,一定要处理每个基于字符串的扫描仪。 –