我正在研究的方法是readDataFromFile()
。它读取一个用 Tabs
分隔数据的文件,例如:
Bird Golden Eagle Eddie
Mammal Tiger Tommy
Mammal Lion Leo
Bird Parrot Polly
Reptile Cobra Colin
这就是我被要求做的事情,但我可能不完全理解如何创建它,任何帮助将不胜感激。
我收到的问题:
Spaces at the beginning or end of the line should be ignored. You should extract the three substrings and then create and add an Animal object to the zoo. You should ignore the first substring ("Bird" in the above example) as it is not required for this part of this project. Also note that, similar to the code you should have commented out, the addAnimal() method will require a third parameter "this" representing the owner of the collection. On successful completion of this step you will have a "basic" working version of readDataFromFile()
动物园类:
public class MyZoo
{
private String zooId;
private int nextAnimalIdNumber;
private TreeMap<String, Animal> animals;
private Animal animal;
public MyZoo(String zooId)
{
this.zooId = zooId.trim().substring(0,3).toUpperCase();
nextAnimalIdNumber = 0;
animals = new TreeMap<String, Animal>();
}
public String allocateId()
{
nextAnimalIdNumber++;
String s = Integer.toString(nextAnimalIdNumber);
while ( s.length()<6 )
s = "0" + s;
return zooId + "_" + s;
}
public void addAnimal(Animal animal)
{
animals.put(animal.getName(), animal);
this.animal = animal;
}
public void readDataFromFile() throws FileNotFoundException
{
int noOfAnimalsRead = 0;
String fileName = null;
JFrame mainWindow = new JFrame();
FileDialog fileDialogBox = new FileDialog(mainWindow, "Open", FileDialog.LOAD);
fileDialogBox.setDirectory(".");
fileDialogBox.setVisible(true);
fileName = fileDialogBox.getFile();
String directoryPath = fileDialogBox.getDirectory();
File dataFile = new File (fileName);
Scanner scanner = new Scanner(dataFile);
//System.out.println("The selected file is " + fileName);
scanner.next();
while(scanner.hasNext())
{
String name = scanner.nextLine();
System.out.println("Animal: " + name);
}
}
动物类别:
public class Animal
{
private String id;
private String species;
private String name;
public Animal(String species, String name, MyZoo owner)
{
id = owner.allocateId();
this.species = species;
this.name = name;
}
public String getId()
{
return id;
}
public String getName()
{
return name;
}
public String getSpecies()
{
return species;
}
public String toString()
{
return id + " " + name + ": a " + species;
}
}
最佳答案
while( scanner.hasNext() ) {
String fileLine = scanner.nextLine()
String[] animalNames = fileLine.split("\t")
...
}
您已经在代码中使用了扫描器,因此我假设您大致了解扫描器的工作原理。上面的代码首先读取下一行输入,作为字符串。因此,例如,在第一位之后,
fileLine := "Bird Golden Eagle Eddie"
然后,我声明一个名为 animalNames
的字符串数组,并将其设置为等于 fileLine.split("\t")
。这是一个可以在字符串上调用的方法 - 它的作用是返回一个子字符串数组,由您提供的任何内容分隔。在本例中,我给出函数 "\t"
,它是代表制表符的字符。所以,在这一行之后,
animalNames := {"Bird", "Golden Eagle", "Eddie"}
由于您现在拥有一个字符串数组,因此您可以通过从中挑选项目来完成其余的分配 - 例如,
animalNames[0] := "Bird"
animalNames[1] := "Golden Eagle"
animalNames[2] := "Eddie"
关于java - 使用扫描仪读取文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51310701/