我的 readDataFromFile()方法读取这样的文本文件:
Bird Golden Eagle Eddie
Mammal Tiger Tommy
Mammal Lion Leo
Bird Parrot Polly
Reptile Cobra Colin
使用我当前的 while loop
,它分隔每个列: type, species and name
。
但是第一行的“ Golden Eagle”由 space
而不是 tab
分隔,因此它计为2个不同的子字符串,因此输出将会是 'Golden Eagle Eddie'
,而不是 'Bird Golden Eagle Eddie'
。
要尝试解决此问题,我使用了 scanner.useDelimiter("\\t");
,但是输出如下所示:
Golden Eagle Eddie
Mammal Tiger
Mammal Lion Leo
Bird
Reptile Cobra Colin
带有 ERROR (错误),该错误会在我的代码'scanner.nextLine();'
中突出显示此行java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at MyZoo.readDataFromFile(MyZoo.java:72)
我的代码:
scanner.useDelimiter("\\t");
scanner.next();
while(scanner.hasNextLine())
{
String type = scanner.next();
String species = scanner.next();
String name = scanner.next();
System.out.println(type + " " + species + " " + name);
scanner.nextLine();
addAnimal( new Animal(species, name, this) );
}
scanner.close();
答案 0 :(得分:0)
首先,您粘贴的文本不是制表符分隔的,而是多空格分隔的。确保您使用的真实文件是制表符分隔的。
似乎可以用分隔符来接受想要的行为,该分隔符接受制表符或换行符,但不接受空格。这是一个示例:
try (Scanner scanner = ...) {
scanner.useDelimiter("\\t|\\R");
while (scanner.hasNext()) {
String type = scanner.next();
String species = scanner.next();
String name = scanner.next();
...
}
}
如果您这样做,则不想打nextLine
。