Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从.txt文件中的多行创建对象_Java - Fatal编程技术网

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

Java 从.txt文件中的多行创建对象,java,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(一个对象的字段): 我从txt读取数据的方法: public ArrayList<Match> getMatches(){ try{ File f

我的问题是:

我有一个具有这种结构的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(一个对象的字段):

我从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 ArrayList getMatches(){
    试一试{
    File File=新文件(“matches.txt”);
    FileReader readerF=新的FileReader(文件);
    BufferedReader reader=新的BufferedReader(readerF);
    字符串行=null;
    字符串matchName=null;
    双程1;
    双courseX;
    双程;
    ArrayList matches=新的ArrayList();
    整数计数=0;
    而((line=reader.readLine())!=null){
    如果(计数%4==3){
    匹配=新匹配(行、course1、courseX、courseY);
    匹配。添加(匹配);
    }否则如果(计数%4==2){
    courseY=Double.parseDouble(行);
    }否则如果(计数%4==1){
    courseX=Double.parseDouble(行);
    }否则{
    course1=Double.parseDouble(行);
    }
    计数++;
    }
    }
    捕获(例外e){
    showMessageDialog(null,“”);
    }
    返回比赛;
    }
    
    抓取每一行,如果该行包含“:”你知道你在一个新对象的开头。取那一行,并用它来构造一个新对象以及它的其他变量的下三行。一种可能是:
    if(line.contains(“:”)String tempStr=line;else-double-tempDbl=double.parseDouble(line.trim())注意:这取决于文件结构,确保所有案例都已处理。此外,还需要打印/存储临时变量,因为它们会失去作用域。我需要用else指令替换第一个if指令,但无论如何:它可以工作。谢谢!
    
    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;
    
        }
    
    }
    
         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;
        }