Java 操作令牌以处理一行上数量可变的字符串

Java 操作令牌以处理一行上数量可变的字符串,java,filereader,stringtokenizer,Java,Filereader,Stringtokenizer,我将尽可能多地解释这一点。我正在从表格中附加行的文件中读取分数。该行由日期、主队、得分、客队、得分组成。 我收集的数据是客场胜利、主场胜利和平局。 下面的代码工作得非常好 JButton viewStatsButton = new JButton(new AbstractAction("VIEW STATS") { public void actionPerformed( ActionEvent e ) { int homeSco

我将尽可能多地解释这一点。我正在从表格中附加行的文件中读取分数。该行由日期、主队、得分、客队、得分组成。 我收集的数据是客场胜利、主场胜利和平局。 下面的代码工作得非常好

JButton viewStatsButton = new JButton(new AbstractAction("VIEW STATS")
    {
        public void actionPerformed( ActionEvent e ) 
        {
            int homeScore = 0;
            int awayScore = 0;
            int homeWins = 0;
            int awayWins = 0;
            int scoreDraw = 0;
            String  line = null;
            String  output;
            String matchDay;
            @SuppressWarnings("unused")
            String  homeTeam;
            @SuppressWarnings("unused")
            String  awayTeam;
            String  file = "scores.dat";
            StringTokenizer tokenizer;

            FileReader fileReader = null;
            try 
            {
                fileReader = new FileReader (file);
            } 
            catch (FileNotFoundException e1) 
            {
                e1.printStackTrace();
            }
            BufferedReader inFile = new BufferedReader (fileReader);
            try 
            {
                line = inFile.readLine();
            } 
            catch (IOException e1) 
            {
                e1.printStackTrace();
            }
            while(line != null)
            {
                tokenizer = new StringTokenizer(line);
                matchDay = tokenizer.nextToken();
                homeTeam = tokenizer.nextToken();
                try
                {
                homeScore = Integer.parseInt(tokenizer.nextToken());
                }
                catch (NumberFormatException exception)
                {
                    System.out.println("Error in input. Line ignored:");
                    System.out.println(line);
                }
                awayTeam = tokenizer.nextToken();
                try
                {
                    awayScore = Integer.parseInt(tokenizer.nextToken());
                }
                catch (NumberFormatException exception)
                {
                    System.out.println("Error in input. Line ignored:");
                    System.out.println(line);
                }

                if(homeScore > awayScore)
                {
                    homeWins++;
                }
                else if(awayScore > homeScore)
                {
                    awayWins++;
                }
                else
                {
                    scoreDraw++;
                }

                try 
                {
                    line = inFile.readLine();
                } 
                catch (IOException e1) 
                {
                    e1.printStackTrace();
                }
            }
            try 
            {
                inFile.close();
            } 
            catch (IOException e1) 
            {
                e1.printStackTrace();
            }
            output = "Home Wins : "+homeWins+"\nAway Wins : "+awayWins+"\nDraws : "+scoreDraw;
            JTextArea textArea = new JTextArea();
            frame.getContentPane().add(textArea, BorderLayout.CENTER);
            textArea.setText(output);
        }
    });
    scorePanel.add(viewStatsButton);    
}
直到球队的名字由纽卡斯尔联队这两条线组成,这个问题才被发现。我要做的是像NewcastleUnited一样将两个字符串附加在一起。我试图找出令牌的长度,如果它小于3,那么我将其作为整数进行解析,但似乎即使下一个令牌引用位于if语句中,它仍然会移动到它后面的令牌

我将非常感谢您的帮助和指导。

请尝试以下内容

  • 调用
    tokenizer.nextToken()
    之前,请检查
    tokenizer.hasMoreTokens()
    以确保有一个令牌可读取
  • 阅读团队名称(第一部分)后,检查下一部分是否为整数,如果为整数,则将其视为分数,否则将其附加到团队名称中
  • 如果您不确定是否存在令牌,请不要忘记检查
    tokenizer.hasMoreTokens()

很抱歉@Rajeev回复太晚,我尝试了你的方法,但确实有效,但有局限性。如果可能有四到五根弦呢?我所做的是连接文件中的字符串并使用#作为标记。尽管如此,你阐明了使用的方法,我对此表示赞赏。
if(tokenizer.hasMoreTokens())
{
    x = tokenizer.nextToken();
}
homeTeam = tokenizer.nextToken();
String temp = tokenizer.nextToken();
try
{
    homeScore = Integer.parseInt(temp);
}
catch(Exception e)
{
    //Comes here if temp is not an integer, so temp is second part of name
    homeTeam = homeTeam + " "+temp; 
    homeScore = Integer.parseInt(tokenizer.nextToken());
}
//Whatever the case, if we come here, it means both hometeam and score are assigned.
...........      
...........
...........