2016-11-07 39 views
1

我的问题:在.txt文件中创建多个行对象

我有这个结构txt文件:

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

我要的是阅读的文本文件,然后创建一个从内部的数据对象。一个对象,我需要的是即(一个对象的字段):

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

一种可能性是:'if(line.contains(“:”))String tempStr = line;否则double tempDbl = Double.parseDouble(line.trim());'注意:这取决于如果文件结构,确保处理所有的情况。此外,临时变量将需要打印/存储,因为它们会减小范围。 –

回答

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

我需要用其他指令替换第一条指令,但无论如何: 它的工作原理。非常感谢! –

2

提示:为"//here i dont know what to do"的逻辑需要是这样的:

  1. 这是一个开始新比赛的线?
  2. 如果是:
    1. 解析行以提取成分
    2. 创造新的赛会纪录
    3. 使它成为当前的战绩
  3. 如果没有:
    1. 是否有目前的比赛记录?如果不是,那么错误。
    2. 将该行解析为数字
    3. 将新数字(whaterever表示)添加到当前匹配记录。