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()
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.
...........
...........
...........