Java:将整数从文件读取到数组中

2022-09-03 16:27:38
File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);

int [] tall = new int [100];

String s =in.readLine();

while(s!=null)
{
    int i = 0;
    tall[i] = Integer.parseInt(s); //this is line 19
    System.out.println(tall[i]);
    s = in.readLine();
}

in.close();

我正在尝试使用文件“Tall.txt”将它们中包含的整数写入名为“tall”的数组中。它在某种程度上这样做,但是当我运行它时,它会引发以下异常(:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at BinarySok.main(BinarySok.java:19)

它究竟为什么这样做,我该如何删除它?正如我所看到的,我将文件作为字符串读取,然后将其转换为ints,这并不违法。


答案 1

你可能想做这样的事情(如果你在java 5及更高版本中)

Scanner scanner = new Scanner(new File("tall.txt"));
int [] tall = new int [100];
int i = 0;
while(scanner.hasNextInt()){
   tall[i++] = scanner.nextInt();
}

答案 2

文件中必须有一个空行。

您可能希望将 parseInt 调用包装在“try”块中:

try {
  tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
  continue;
}

或者只需在解析之前检查空字符串:

if (s.length() == 0) 
  continue;

请注意,通过在循环内初始化索引变量,它始终为 0。应将声明移到循环之前。(或者让它成为循环的一部分。iwhilefor