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)
为什么要这样做,我该如何删除它?在我看来,我将文件读作字符串,然后将其转换为int,这不是非法的。
答案 0 :(得分:43)
你可能想要做这样的事情(如果你在java 5& up)
Scanner scanner = new Scanner(new File("tall.txt"));
int [] tall = new int [100];
int i = 0;
while(scanner.hasNextInt()){
tall[i++] = scanner.nextInt();
}
答案 1 :(得分:9)
您的文件中必须有空行。
您可能希望将parseInt调用包装在“try”块中:
try {
tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
continue;
}
或者只是在解析之前检查空字符串:
if (s.length() == 0)
continue;
请注意,通过在循环内初始化索引变量i
,它始终为0.您应该在while
循环之前移动声明。 (或使其成为for
循环的一部分。)
答案 2 :(得分:3)
为了比较,这是另一种读取文件的方法。它有一个优点,你不需要知道文件中有多少整数。
File file = new File("Tall.txt");
byte[] bytes = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytes);
fis.close();
String[] valueStr = new String(bytes).trim().split("\\s+");
int[] tall = new int[valueStr.length];
for (int i = 0; i < valueStr.length; i++)
tall[i] = Integer.parseInt(valueStr[i]);
System.out.println(Arrays.asList(tall));
答案 3 :(得分:2)
看起来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();
答案 4 :(得分:1)
您可能会在不同的行结尾之间产生混淆。 Windows文件将以回车符和换行符结束每一行。 Unix上的某些程序会读取该文件,好像它在每一行之间有一个额外的空行,因为它会将回车视为行尾,然后将换行视为另一行。
答案 5 :(得分:0)
File file = new File("E:/Responsibility.txt");
Scanner scanner = new Scanner(file);
List<Integer> integers = new ArrayList<>();
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
integers.add(scanner.nextInt());
} else {
scanner.next();
}
}
System.out.println(integers);