Java:将整数从文件读入数组
Posted
技术标签:
【中文标题】Java:将整数从文件读入数组【英文标题】:Java: Reading integers from a file into an array 【发布时间】:2010-09-23 03:59:24 【问题描述】: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)
为什么它会这样做,我该如何删除它?如我所见,我将文件作为字符串读取,然后将其转换为整数,这并不违法。
【问题讨论】:
顺便说一句,您应该在 while 循环之外声明“i”。如果不是,您将始终在数组的索引 0 处插入整数。 顺便说一句,评论“这是第 19 行”是“Best comment ever seen”的候选者。您使用的是什么 IDE? 我完全不知道它是如何到达那里的。我想我从某个地方获取了部分代码,显然 cmets 出现了。 【参考方案1】:您的文件中必须有一个空行。
您可能希望将 parseInt 调用包装在“try”块中:
try
tall[i++] = Integer.parseInt(s);
catch (NumberFormatException ex)
continue;
或者只是在解析前检查空字符串:
if (s.length() == 0)
continue;
请注意,通过在循环内初始化您的索引变量i
,它始终为0。您应该将声明移到while
循环之前。 (或者让它成为for
循环的一部分。)
【讨论】:
很可能是文件的最后一行。【参考方案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();
【讨论】:
【参考方案3】:您可能会混淆不同的行尾。 Windows 文件将以回车符和换行符结束每一行。 Unix 上的某些程序将读取该文件,就好像它在每行之间有一个额外的空白行,因为它会将回车视为行尾,然后将换行视为行的另一端。
【讨论】:
不,不管应用在什么平台上运行,BufferedReader 总是检查所有三种行分隔符:\r\n(回车+换行),\n(换行仅)和 \r(仅回车)。【参考方案4】:您可能想做这样的事情(如果您使用的是 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();
【讨论】:
@Vanuan:java.util.ArrayList
【参考方案5】:
为了比较,这里是另一种读取文件的方法。它的一个优点是您不需要知道文件中有多少个整数。
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));
【讨论】:
【参考方案6】: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);
【讨论】:
以上是关于Java:将整数从文件读入数组的主要内容,如果未能解决你的问题,请参考以下文章