对于来自.txt文件的输入有例外的问题

时间:2019-04-04 12:04:43

标签: java

嗨,我目前正在创建一个程序,该程序将允许我输入.txt文件的路径,其格式为:

家庭名称:离开名称:家庭得分:离开得分

利物浦:切尔西:2:1

马刺:富勒姆:1:1:

,它应按顺序输出到控制台。但是,我在例外方面遇到了麻烦。我试图使其显示,以便如果缺少任何一个参数(例如定界符),则缺少团队名称/得分,它将向控制台输出错误。我想要它,以便它将显示所有缺少的参数,而不仅仅是一个。例如,缺少主队名称。客队名称丢失。没有字段定界符。无效的房屋得分,请检查它是一个整数。

我们非常感谢您的帮助。谢谢!

我现在拥有的当前代码是:

2 个答案:

答案 0 :(得分:0)

错误是因为文件的第一行是标题 住家名称:离开名称:住所分数:离开分数

当您尝试将拆分的文本解析为int时,它将无法解析,并在代码的以下行中引发错误

int homeScore = Integer.parseInt(splitText[2].trim());

我希望这会为您提供指导,以找到问题的解决方案。尽管很难猜测这个问题,因为没有任何错误堆栈跟踪。

答案 1 :(得分:0)

如果要显示所有错误,则不应使用异常。这些用于在发生意外情况时使用。相反,您应该进行诸如splitText[0].length() == 0之类的检查并收集所有错误。话虽如此,ArrayIndexOutOfBoundsException可以替换为splitText.length < 4的检查(当然,以下检查也需要考虑到这一点)。

NumberFormatException可能是该规则的例外,因为您要么必须检查字符串是否为数字,然后尝试解析它,要么尝试尝试捕获异常以知道它不是一个数字。

您的代码将如下所示:

List<String> errors = new LinkedList<>();
if( splitText.length < 4) {
   errors.add("Fields might be missing")
} 

//do other checks here

//if all fields are present, check the numbers (this could be done in some method)
int homeScore = -1;
try {
  homeScore = Integer.parseInt(splitText[2].trim());
} catch( NumberFormatException e) {
  errors.add("Homescore is not an integer");
}

//other checks and then finally:

if( errors.isEmpty() ) { 
  //everything ok
} else {
  //print the collected errors
}

请注意,如果其他检查已失败,则某些检查没有意义,即,如果数组的长度小于4或如果第4个元素为空字符串(至少在修剪之后),解析分数就没有意义。 )。那必须要考虑在内。