BufferedReader in = new BufferedReader(new FileReader(file));
String line;
int[] data = null;
while((line = in.readLine()) != null) {
String[] a = line.split(","); //read in all numbers in file
data = new int[a.length]; //convert those numbers from Strings to ints
for(int i = 0; i < a.length; i++) {
data[i] = Integer.parseInt(a[i]);
System.out.print(data[i] + ","); //testing
}
}
System.out.println();
for(int i = 0; i < data.length; i++) {
System.out.print(data[i] + ",");
}
文件只包含以逗号分隔的1行数字,例如:
5,4,
1,-1,-1,1,1,
1,0,3,4,1,
1,0,2,2,1,
1,1,1,1,1,
程序创建一个只包含数字的字符串数组,然后以相同的顺序创建一个整数数组。但是改为将字符串改为int,然后验证int数组是否包含文件中的值,打印出int数组。
此代码输出:
5,4,1,-1,-1,1,1,1,0,3,4,1,1,0,2,2,1,1,1,1,1,1,
1,1,1,1,1,
正如您可以看到第一行数字(对应于while块内的打印功能)正确打印。但是当数组被迭代并在while块之外再次打印时,突然它完全不同了,为什么会这样呢?该数组在while块之外应该是相同的。
答案 0 :(得分:0)
试图编辑你的问题,我看到你粘贴了:
button
所以,我可以想象你的文件是这样的。
如果您执行此代码:
5,4,
1,-1,-1,1,1,
1,0,3,4,1,
1,0,2,2,1,
1,1,1,1,1,
你可以看到 data.length 最后是5(显而易见的原因)。这就是
中的原因BufferedReader in = new BufferedReader(new FileReader("Path_to/java.txt"));
String line;
int[] data = null;
while((line = in.readLine()) != null) {
String[] a = line.split(","); //read in all numbers in file
data = new int[a.length]; //convert those numbers from Strings to ints
System.out.println("1data.length: " + data.length);
for(int i = 0; i < a.length; i++) {
data[i] = Integer.parseInt(a[i]);
System.out.println(data[i] + ","); //testing
}
}
System.out.println("data.length: " + data.length);
for(int i = 0; i < data.length; i++) {
System.out.print(data[i] + ",");
}
}
你看
for(int i = 0; i < data.length; i++) {
System.out.print(data[i] + ",");
}
答案 1 :(得分:0)
在测试代码后,我发现它可以正常格式化文本文件。正确格式化为单行,逗号分隔整数,没有多余的空格。
程序的有效文本文件示例:
5,4,1,-1,-1,1,1,1,0,3,4,1,1,0,2,2,1,1,1,1,1,1
如果文件中有换行符,则数组data
将使用等于当前分割线长度的新数组重新初始化。因此,data
将仅包含最后一行读取。
我建议使用List
作为更好的解决方案,因为整数的数量可能是未知的,Scanner
使用分隔符“,”来读取文本文件。此外,在“扫描”文本文件的同时,删除所有额外的空白区域,以防止NumberFormatException
在使用Integer.valueOf()
时出现任何空白区域。这种方法可以读取较少格式的文本文件。注意,如果文件不包含整数,这仍然会导致异常。
例如:
String fileName = "test.txt";
Scanner scanner = new Scanner(new File(fileName));
scanner.useDelimiter(",");
List<Integer> result = new ArrayList<>();
while (scanner.hasNext()) {
// add the parsed integer to the list, removing split space.
result.add(Integer.valueOf(scanner.next().replaceAll("\\s+", "")));
}
// Display contents
String output = "";
for (int value : result) {
if (!output.isEmpty()) {
output += ", ";
}
output += value;
}
System.out.println(output);