Java:将整数从文件读入数组

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,这并不违法。

您的文件中必须有一个空行。

您可能需要用一个 "try" 块来封装您的 parseInt 调用:

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

或者干脆在解析前检查是否为空字符串:

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

请注意,通过在循环内初始化索引变量 i,它始终为 0。您应该将该声明移到 while 循环之前。(或者将其作为 for 循环的一部分)。

评论(1)

看起来 Java 正在尝试将一个空字符串转换成一个数字。一系列数字的末尾是否有空行?

您或许可以这样修改代码

String s = in.readLine();
int i = 0;

while (s != null) {
    // Skip empty lines.
    s = s.trim();
    if (s.length() == 0) {
        continue;
    }

    tall[i] = Integer.parseInt(s); // This is line 19.
    System.out.println(tall[i]);
    s = in.readLine();
    i++;
}

in.close();
评论(0)

您可能会对不同的行结束符感到困惑。 Windows 文件的每行结尾是回车和换行。 Unix 上的一些程序在读取该文件时会认为每行之间多了一个空行,因为它将回车视为行尾,然后将换行视为另一个行尾。

评论(1)