使用BufferedReader读取每行的多个数据值

时间:2016-04-13 02:49:56

标签: java bufferedreader

我正在制作一个从名为playoffs.txt的文件中读取数据的程序。每一行都有一个团队名称,分数和分区,每个分别用冒号分隔,如下所示:

Panthers:0:Atlantic
Lightning:0:Atlantic
Red Wings:0:Atlantic

我想运行一个for循环,为每个团队打印出来:

Team: Panthers
Series Score: 0
Division: Atlantic

但是,我无法弄清楚如何分隔每一行的值,因为readLine似乎打印出整行。这是我的方法:

private static void series(String team1) throws FileNotFoundException, IOException{
    BufferedReader in = new BufferedReader(new FileReader("playoffs.txt"));

    String[] team = new String[0];
    int[] score = new int[0];
    String[] division = new String[0];
    String s;
    int j = 0; 
    while((s = in.readLine()) != null){
        String[] var = s.split(":");
        team[j] = in.readLine(var[0]);
        score[j] = in.read();
        division[j] = in.read();
        cout.println(team[j]);
        cout.println(score[j]);
        cout.println(division[j]);
        j++;
    }
}

我是Java和我在另一个类似于我的问题的StackOverflow问题上找到的s.split行的新手,它运行了一个错误,说"字符串无法转换为布尔值。&#34 ;我也对readLine()和read()之间的区别感到困惑。任何帮助指出我正确的方向来分别阅读每个值将不胜感激。

2 个答案:

答案 0 :(得分:3)

    String[] var = s.split(":");
    team[j] = var[0];
    score[j] = var[1];
    division[j] = var[2];

但是您应该将team初始化为足够大以容纳您的数据 我个人会使用ArrayList

考虑创建一个名为Team的新类,该类具有团队名称,分数和分组。您可以创建ArrayList <Team> = new ArrayList <Team> ();

答案 1 :(得分:1)

您正确地拆分了':'符号,该符号返回String[]。 您无需致电in.readLIne(var[0])。您已经拥有String[]中的值。只需将它们分配给您的变量:

while((s = in.readLine()) != null){
    String[] var = s.split(":");
    team[j] = var[0];
    score[j] = var[1];
    division[j] = var[2]
    cout.println(team[j]);
    cout.println(score[j]);
    cout.println(division[j]);
    j++;
}

这解决了您的一个问题。但是,由于您尝试为每个条目存储多个值,因此最好使用表示您拥有的数据的容器类。然后,您可以创建容器类的新实例,并覆盖toString()方法,以在收到所有输入后打印每个内容。

尝试添加GameResult类(或称之为其他类):

public class GameResult{
    String team;
    int score;
    String division;

    public GameResult(String team, int score, String division){
        this.team = team;
        this.score = score;
        this.division = division;
   }

   public String getTeam(){
       return team;
   }

   public int getScore(){
       return score;
   }

   public String getDivision(){
       return division;
   }

   @Override
   public String toString(){
       StringBuilder sb = new StringBuilder();
       sb.append("Team: ").append(team).append("\n");
       sb.append("Score: ").append(score).append("\n");
       sb.append("Division: ").append(division).append("\n");

       return sb.toString();
   }
}

现在,您可以使用新类和List中的每个行存储来稍后打印结果:

private static void series(String team1) throws FileNotFoundException, IOException{
    BufferedReader in = new BufferedReader(new FileReader("playoffs.txt"));
    List<GameResult> results = new ArrayList<>();
    String s;

    while((s = in.readLine()) != null){
        String[] var = s.split(":");
        GameResult result = new GameResult(var[0], var[1], var[2]);

    }

    //Print out the results
    for(GameResult aResult: results){
        System.out.print(aResult);
    }
}