我无法阅读文本文件的第一个单词。如果第一个单词等于'Circle',我想在我的数组中创建一个新的Circle对象。
FileInputStream fileIn = new FileInputStream("shapeFile.txt");
Scanner scan = new Scanner(fileIn);
while(scan.hasNextLine()) {
String shape = scan.next();
if(shape.equals("Circle")) {
myShapes.addShape(new Circle(scan.nextInt(), scan.nextInt(), scan.nextInt(), Color.RED));
}
}
我收到以下代码的错误,指向行String shape = scan.next();
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at shapes.ShapeManagement.main(ShapeManagement.java:151)
Java Result: 1
如果有人能帮我解决这个问题,我将非常感激。
答案 0 :(得分:4)
您可能遇到此异常的原因是因为scan.hasNextLine()
可以返回true
,即使该行上没有令牌也是如此。如果您在标记后没有令牌时拨打scan.next()
,则会收到您所看到的java.util.NoSuchElementException
。
因此,为scan.hasNextLine()
换出scan.hasNext()
。
或者,您可以将scan.next()
替换为scan.nextLine()
,然后检查该行中的第一个单词是否是您要查找的单词。对于具有大量行的文件,这可能会更快。
我希望这会有所帮助。
答案 1 :(得分:1)
您可能需要按如下方式修改代码:
FileInputStream fileIn = new FileInputStream("shapeFile.txt");
Scanner scan = new Scanner(fileIn);
int[] var1 = new int[3];
while(scan.hasNext()) {
String shape = scan.next();
if(shape.equals("Circle")) {
for(int i = 0; i < 3;i++) {
if(scan.hasNextInt()) {
var1[i] = scan.nextInt();
} else {
break;
}
}
myShapes.addShape(new Circle(var1[0], var1[1], var1[2], Color.RED));
}
}