【问题标题】:Finding a word using Buffered Reader使用缓冲阅读器查找单词
【发布时间】:2015-05-22 12:27:56
【问题描述】:

我正在解析具有以下文本和相同格式的文件,

姓名:_____ 性别:____

年龄:_____ 年级:______

解析时,我想先看看是“性别:f”还是“性别:m”,如果例如“性别:f”,那么我将创建一个新的女孩对象并设置她的姓名、年龄和年级.否则,如果是男孩,我会创建一个新的男孩对象并设置他的姓名、年龄和年级。

我的代码目前仅适用于一种性别。我不确定如何实现它来搜索其他性别。

while ((line = br.readLine()) != null) {
    line = line.trim();
    st = new StringTokenizer(line);
    if (line.endsWith("gender: f")) {
        f = new female();
        st.nextToken(); 
        String name = st.nextToken();
        f.setName(name);                    
    } else if (line.startsWith("age:")) {
        st.nextToken();
        String age= st.nextToken();
        f.setAge(age);
        line = br.readLine();
    }       
}

请帮忙!谢谢。

【问题讨论】:

  • 我认为你可能想多了,因为你已经有了大致的想法。只需将另一个else if添加到块中即可。 else if (line.endsWith("gender: m")) { ... } 顺便说一句,既然你在做键/值之类的事情,你应该研究一下 JSON
  • 你是对的!谢谢!

标签: java while-loop bufferedreader readline stringtokenizer


【解决方案1】:

你不能试试这个:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class FileReaderExample
{
        private Person person;

        private Person readFile()
        {
          File file = new File("d:\\text.txt");
          try
          {
            FileReader fileReader = new FileReader(file);
            BufferedReader br = new BufferedReader(fileReader);
            String line;
            while ((line = br.readLine()) != null)
            {
              line = line.trim();
              StringTokenizer st = new StringTokenizer(line);
              if ( line.endsWith("gender: f") )
              {
                person = new Female();
                st.nextToken();
                String name = st.nextToken();
                person.setName(name);
              }
              else if ( line.endsWith("gender: m") )
              {
                person = new Male();
                st.nextToken();
                String name = st.nextToken();
                person.setName(name);
              }
              else if ( line.startsWith("age:") )
              {
                st.nextToken();
                String age = st.nextToken();
                person.setAge(age);
                line = br.readLine();
              }
            }

          }
          catch (IOException io)
          {
            // 
          }

          return person;
        }

      public abstract class Person
      {
        private String name;
        private String age;
        private String grade;

        public String getAge()
        {
          return age;
        }

        public void setAge(String age)
        {
          this.age = age;
        }

        public String getName()
        {
          return name;
        }

        public void setName(String name)
        {
          this.name = name;
        }

        public String getGrade()
        {
          return grade;
        }

        public void setGrade(String grade)
        {
          this.grade = grade;
        }

      }

      public class Female extends Person
      {
         public Female() {}
      }


      public class Male extends Person
      {
         public Male() {}
      }

}

【讨论】:

    【解决方案2】:

    假设您的文件仅包含一个人,您可以执行以下操作:

    while ((line = br.readLine()) != null) {
        line = line.trim();
        st = new StringTokenizer(line);
    
        if (line.endsWith("gender: f")) {
            person = new Female(); // Your Java classes's name should start with a capital letter (coding convention)
            st.nextToken(); 
            String name = st.nextToken();
            person.setName(name);                    
        } else if (line.endsWith("gender: m")) {
            person = new Male();
            st.nextToken(); 
            String name = st.nextToken();
            person.setName(name);                    
        } else if (line.startsWith("age:")) {
            if(person != null) { // person can be null if the first line of your file is wrong
                st.nextToken();
                String age = st.nextToken();
                person.setAge(age);
            }
            line = br.readLine();
        }       
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2017-09-23
      • 1970-01-01
      • 2011-10-23
      • 2023-03-23
      • 1970-01-01
      • 2020-10-24
      • 2015-02-06
      • 1970-01-01
      相关资源
      最近更新 更多