我正在使用的方法是readDataFromFile()
。它读取一个文件,该文件的数据用Tabs
分隔,例如:
Bird Golden Eagle Eddie
Mammal Tiger Tommy
Mammal Lion Leo
Bird Parrot Polly
Reptile Cobra Colin
这是我被要求做的,但是我可能不太了解如何创建它,任何帮助将不胜感激。
我得到的问题:
应忽略行首或末尾的空格。您 应该提取三个子串,然后创建并添加一个Animal 反对动物园。您应该忽略第一个子字符串( 以上示例),因为本部分不需要 项目。另请注意,类似于您应具有的代码 注释掉,addAnimal()方法将需要第三个参数 “ this”代表集合的所有者。成功 完成此步骤后,您将有一个“基本”工作版本 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;
}
}
答案 0 :(得分:2)
while( scanner.hasNext() ) {
String fileLine = scanner.nextLine()
String[] animalNames = fileLine.split("\t")
...
}
您已经在代码中使用了扫描仪,因此我假设您大致了解扫描仪的工作原理。上面的代码首先以字符串形式读取下一行输入。因此,例如,在第一行之后,
fileLine := "Bird Golden Eagle Eddie"
然后,我声明一个名为animalNames
的字符串数组,并将其设置为等于fileLine.split("\t")
。您可以在String上调用此方法-它所执行的操作是返回子字符串数组,该子字符串由您提供的内容分隔。在这种情况下,我给函数"\t"
,它是代表制表符的字符。因此,在这一行之后,
animalNames := {"Bird", "Golden Eagle", "Eddie"}
由于您现在有了一个字符串数组,因此可以通过从其中选择项目来完成剩下的工作-例如,
animalNames[0] := "Bird"
animalNames[1] := "Golden Eagle"
animalNames[2] := "Eddie"
答案 1 :(得分:0)
您可以简单地使用Scanner.next
来读取文件(这里我使用了String
来匹配文件中的内容)
查找并返回此扫描仪的下一个完整令牌。完整的令牌在其前面,然后是与定界符模式匹配的输入
String data = "Bird\tGolden Eagle \t Eddie\nMammal \t Tiger Tommy";
Scanner scanner = new Scanner(data);
while (scanner.hasNext()) {
System.out.println("Animal: " + scanner.next());
}
scanner.close();
输出:
Animal: Bird
Animal: Golden
Animal: Eagle
Animal: Eddie
Animal: Mammal
Animal: Tiger
Animal: Tommy
这将使用类中定义的Scanner
中的分隔符
扫描程序使用定界符模式将其输入分为令牌,默认情况下,该定界符与空格匹配
我们可以使用来查看默认值
System.out.println(scanner.delimiter());
\ p {javaWhitespace} +