如果文本文件由一行数字组成,下面的代码可以完全正常运行,但是一旦它到达例如一行说“我是40”,它就会跳过它,而不是将40放入数组中。Scanner inFile = null; File file = null; String filePath = (JOptionPane.showInputDialog("Please enter a file path")); int size = 0; int[] result = new int[10]; try { file = new File(filePath); inFile = new Scanner(file); int skippedCounter = 0; for(int i = 0; inFile.hasNext(); i++){ if(inFile.hasNextInt()) result[i] = inFile.nextInt(); else{ String strOut = ""; String data = inFile.next(); for(int j = 0; j <= data.length() - 1; j++){ if(!Character.isLetter(data.charAt(j))){ strOut += data.charAt(j); } else skippedCounter++; } result[i] = Integer.parseInt(strOut); } } }
3 回答

DIEA
TA贡献1820条经验 获得超3个赞
next()
将为您提供下一个令牌,而不是下一行。所以变量可能会超过十。如果你没有一个空的捕获,你会意识到这一点:你的数组正在越界i
溶液:
不要使用结果数组,使用结果列表,并在有其他结果时追加到其末尾
注意:
另一个可能发生的隐藏异常是,当您的 parseInt 由于非数字数据而失败时。因此,不要将所有内容都包装在巨大的尝试/捕获中,这只会使调试变得更加困难!

慕妹3242003
TA贡献1824条经验 获得超6个赞
以下
result[i] = Integer.parseInt(strOut)
将导致 在尝试处理任何信件时出现 。作为空字符串中的结果NumberFormatException
strOut
""
在尝试解析之前,您必须检查空字符串
if (!strOut.isEmpty()) { result[i] = Integer.parseInt(strOut); }
添加回答
举报
0/150
提交
取消