如果文本文件由数字行组成,则下面的代码运行得很好,但是一旦到达例如说“我是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);
}
}
}
答案 0 :(得分:0)
next()
将为您提供下一个令牌而不是下一行。因此变量i
可能会超过10。如果没有空捕获,您将意识到这一点:您的数组超出了范围
解决方案:
不要使用结果数组,请使用结果列表,并在有其他结果时附加到其末尾
注意:
另一个可能发生的隐藏异常是当parseInt由于非数字数据而失败时。因此,不要将所有内容都包装在一个巨大的try / catch中,这只会增加调试的难度!
答案 1 :(得分:0)
我建议您只使用一次nextInt函数来保留请求的值,然后在需要时使用该变量。我认为nextInt函数每次调用时都会移至下一个int。
答案 2 :(得分:0)
以下
result[i] = Integer.parseInt(strOut)
尝试处理任何字母时,将导致NumberFormatException
。由于strOut
导致空字符串""
在尝试解析之前,您必须检查一个空的字符串
if (!strOut.isEmpty()) {
result[i] = Integer.parseInt(strOut);
}