简体   繁体   English

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

[英]Create object from multiple lines in .txt file

My problem: 我的问题:

I have txt file with that structure: 我有具有该结构的txt文件:

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

What i want is to read text file, and create objects from data inside. 我想要的是读取文本文件,并从内部数据创建对象。 One object that i need is ie.(fields of one object ) : 我需要的一个对象是ie。(一个对象的字段):

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

My method to read data from txt: 我从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;
}

Do You have any tips/tricks how to do that? 您有任何技巧/窍门吗? Thanks a lot for some answer 非常感谢您的回答

EDIT: 编辑:

My Match class: 我的比赛课程:

    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;

    }

}

Hint: The logic for "//here i dont know what to do" needs to be something like this: 提示: "//here i dont know what to do"的逻辑必须是这样的:

  1. Is this a line that starts a new match? 这是开始新比赛的线吗?
  2. If yes: 如是:
    1. parse the line to extract components 解析线以提取组件
    2. create new match record 创建新的比赛记录
    3. make it the current match record 使其成为当前比赛记录
  3. If no: 如果不:
    1. Is there a current match record? 当前有比赛记录吗? If no, then ERROR. 如果否,则为错误。
    2. parse the line as a number 将行解析为数字
    3. add the new number (whaterever it means) to the current match record. 将新号码(无论其含义)添加到当前比赛记录中。

Try this (I'm assuming the input file is valid so you might need to handle exceptions otherwise): 试试这个(我假设输入文件是有效的,所以您可能需要处理异常):

     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;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM