嗨,我目前正在创建一个程序,该程序将允许我输入.txt文件的路径,其格式为:
家庭名称:离开名称:家庭得分:离开得分
利物浦:切尔西:2:1
马刺:富勒姆:1:1:
,它应按顺序输出到控制台。但是,我在例外方面遇到了麻烦。我试图使其显示,以便如果缺少任何一个参数(例如定界符),则缺少团队名称/得分,它将向控制台输出错误。我想要它,以便它将显示所有缺少的参数,而不仅仅是一个。例如,缺少主队名称。客队名称丢失。没有字段定界符。无效的房屋得分,请检查它是一个整数。
我们非常感谢您的帮助。谢谢!
我现在拥有的当前代码是:
答案 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个元素为空字符串(至少在修剪之后),解析分数就没有意义。 )。那必须要考虑在内。