java - java读取txt文件(2D)成几个二维数组
问题描述
我有一个包含如下数据的文本文件:
HW1 HW2 HW3 HW4 HW5
97 64 75 100 21 John
19 68 89 49 97 Kim
28 83 48 44 91 Kathy
69 66 78 87 85 Steve
99 94 93 96 91 Stacy
35 75 65 55 45 Faith
我尝试用 读取大小BufferedReader
,以便可以将它们转换为多个数组(即HW1arr
、HW2arr
等...)。我怎样才能找到像这个 2D 文件这样的数组大小?
public static void main(String[] args) {
Scanner reader = null;
try {
File f = new File("inputHW7.txt");
reader = new Scanner(f);
} catch(FileNotFoundException e) {
}
double[][] size2d = null;
int count = 0;
int rowCount =0;
int colCount = 0;
int readChar = 0;
boolean empty = true;
rowCount = reader.nextInt();
for(int i=0 ; i<rowCount ; i++){
colCount = reader.nextInt();
size2d[i] = new double[colCount];
System.out.print("debugs column = "+size2d[i]);
for(int j=0 ; j<colCount ; j++){
size2d[i][j] = reader.nextDouble();
System.out.println("debug rows = "+ size2d[i][j]);
}
}
}
解决方案
这是一个概念。我不会为你做作业。
- 用文件的所有行填充字符串类型的ArrayList (如果有的话,不包括空行)。完成文件后,请务必关闭文件读取。
List<String> list = new ArrayList<>();
. 您将需要利用List.add()方法将每个所需的文件数据行添加到列表中。 - ArrayList size (
list.size()
) 现在告诉您 要创建的每个 Array的长度(长度)。将每个列数组(即:hw1Array[]到hw5Array[])声明为双精度数据类型。查看您的代码,无论如何这都是您的意图。请务必立即初始化每个数组的长度:double[] hw1Array = new double[list.size()];
. - 由于名称列将被忽略,我们不会担心它。
- 现在,创建一个for循环,以便遍历您通过读取数据文件创建的List 。使用i作为迭代变量。
for (int i = 0; i < list.size(); i++) { }
. - 在for循环中声明一个字符串数组并针对每个 List 元素使用
String.split()方法
String[] lineValues = list.get(i).split("\\s+");
:这"\\s+"
是split()方法中的正则表达式,这意味着在包含任意数量空格的分隔符上拆分字符串。 现在只需填充 5 个柱状数组即可。再次在您的for循环中,使用在上一个代码行中创建的lineValues[]字符串数组中的数据填充每个列数组, 并在过程中使用Double.parseDouble()方法转换为双精度数据类型,例如:
if (lineValue.length >= 1) { hw1Array[i] = Double.parseDouble(lineValue[0]); } if (lineValue.length >= 2) { hw2Array[i] = Double.parseDouble(lineValue[1]); } if (lineValue.length >= 3) { hw3Array[i] = Double.parseDouble(lineValue[2]); } if (lineValue.length >= 4) { hw4Array[i] = Double.parseDouble(lineValue[3]); } if (lineValue.length >= 5) { hw5Array[i] = Double.parseDouble(lineValue[4]); }
我们使用if条件来确保确实有要解析的数据加倍,否则我们最终会得到NumberFormatException。
您的数组现在已创建。
要快速显示您的数组:
System.out.println(Arrays.toString(hw1Array));
System.out.println(Arrays.toString(hw2Array));
System.out.println(Arrays.toString(hw3Array));
System.out.println(Arrays.toString(hw4Array));
System.out.println(Arrays.toString(hw5Array));
推荐阅读
- powershell - 带有字符参数的 Powershell -invokesql
- mysql - NodeJS AWS Lambda:连接丢失:服务器关闭了连接
- cypress - Cy.request() 无故超时
- oop - 动态创建对象并通过父类访问
- liquibase - 雪花的 Liquibase 数据库更改日志
- java - Java,无法使正则表达式工作
- swift - 快速更改消息 UIAlertController
- node.js - 启动 Nodejs 和 Docker,然后在单个语句中将参数传递给 index.js
- php - 后增量表现怪异
- azure - 阶段中的 Azure 编码作业错误:GenerateOutputMediaMetadata