java - 使用扫描仪读取文件数据

标签 java

我正在研究的方法是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/

相关文章:

java - 为什么我不能使用 <jsp :getProperty> without <jsp:useBean>?

java - 在 introscope 中为独立的 springboot java 应用程序获取 JDBC 连接监控数据

java - 如何在重复值的情况下找到最大的元素定位器

java - 测试NG : How to return List<String> from DataProvider method

java - 如何通过CSS选择器从元素列表中正确选择第n个元素

java - 使用变量的值作为枚举值

java - [Spring MVC]- 如何检索 map 中的所有表单参数?

java - JPA @repository @Query 可以处理空实体吗?

java - 我如何在 Java 中实现一个带有图像和 3 个不同字符串值的数组

java - 如何使用 Intellij 插件开发 API 将 jar 复制到 libs 文件夹中