从.txt文件中的多行创建对象

时间:2016-11-07 22:41:04

标签: java

我的问题:

我有这种结构的txt文件:

20:00   Norwich Res-Milton K.   
2.45
3.30
2.45 
20:30   Everton Res-Blackpool   
2.24
3.25
2.73

我想要的是读取文本文件,并从内部数据创建对象。我需要的一个对象是ie。(一个对象的字段):

    20:00   Norwich Res-Milton K. (String)
    2.45 (double)
    3.30 (double)
    2.45 (double)
...

我从txt读取数据的方法:

public ArrayList<Match> getMatches(){
    try{
        File file = new File("matches.txt");
        FileReader readerF = new FileReader(file);
        BufferedReader reader = new BufferedReader(readerF);

        String line = null;

        while((line = reader.readLine()) !=null){
               //here i dont know what to do 
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null, "");
    }
    return matches;
}

你有任何提示/技巧怎么做? 非常感谢您的回答

编辑:

我的匹配课程:

    public class Match {

        private String matchName;
        private double course1;
        private double courseX;
        private double courseY;

        public Match(String matchName, double course1, double courseX, double courseY){
            this.matchName=matchName;
            this.course1=course1;
            this.courseX=courseX;
            this.courseY=courseY;

    }

}

2 个答案:

答案 0 :(得分:2)

提示:"//here i dont know what to do"的逻辑必须是这样的:

  1. 这是一条开始新比赛的线吗?
  2. 如果是:
    1. 解析该行以提取组件
    2. 创建新的匹配记录
    3. 使其成为当前的匹配记录
  3. 如果不是:
    1. 目前是否有匹配记录?如果不是,则为ERROR。
    2. 将该行解析为数字
    3. 将新号码(whaterever表示)添加到当前匹配记录中。

答案 1 :(得分:0)

试试这个(我假设输入文件有效,所以你可能需要处理异常):

     public ArrayList<Match> getMatches(){
        try{
            File file = new File("matches.txt");
            FileReader readerF = new FileReader(file);
            BufferedReader reader = new BufferedReader(readerF);

            String line = null;
            String matchName = null;
            double course1;
            double courseX;
            double courseY;
            ArrayList<Match> matches = new ArrayList<>();
            int count = 0;

            while((line = reader.readLine()) !=null){
                   if (count%4 == 3) {
                       Match match = new Match(line, course1, courseX, courseY);
                       matches.add(match);
                   } else if (count%4 == 2) {
                       courseY = Double.parseDouble(line);
                   } else if (count%4 == 1) {
                       courseX = Double.parseDouble(line);
                   } else {
                       course1 = Double.parseDouble(line);
                   }
                   count++;
            }
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, "");
        }
        return matches;
    }