嘿伙计们,我想阅读一个文本文件,它有多个类似于二维数组的数字。我想找到每列的总和并将其添加到我的 int 数组中。我还想跳过第一列而不是将其添加到我的 int 数组中。例如:
所以这将是我的文本文件。我想阅读此内容但跳过第一列并将该列的其余部分添加到一个 int 数组中。所以我希望我的 int array[] 看起来像
到目前为止我有这个:
public static void main(String[] args) throws FileNotFoundException
{
String fileRead = "";
int[][] num = null;
File file = new File("C:\\Users\\Tommy\\Documents\\day.txt");
Scanner reader = new Scanner(file);
while(reader.hasNextLine())
fileRead += reader.nextLine();
String line = fileRead;
String[] info = line.split(" ");
for (int i = 1; i < info.length; i++)
{
System.out.println(info[i]);
}
}
我的代码没有完成,因为我不知道如何添加列。但到目前为止它打印第一行并跳过 0001。但随后它打印第二行并且不跳过 0002。所以到目前为止我的代码的输出看起来像:
然后它打印出来
等 关于如何解决这个问题的任何线索?
你的
fileRead
变量得到第一行,在第二行它立即连接第二行,所以字符串看起来像这样:
..90002 1 ..
你只需要在 while 循环中插入一个空格即可。
while(reader.hasNextLine())
fileRead += reader.nextLine();
fileRead += “ “;
编辑
while(reader.hasNextLine()){
fileRead += reader.nextLine();
fileRead +=‘$’;
String line = fileRead;
String[] infoRow = line.split("$");
int[] results = new int[9];
for (int i = 0; i< infoRow.length;i++){
string[] info = infoRow[i].split(" ");
for (int j = 1; j < info.length; j++){
results[j-1] += Integer.parseInt(info[j]);
}
}
for (int i = 0; i< results.length;i++){
System.out.println(results[i]);
}
有很多方法可以做到这一点。这是一种主要在您阅读值时执行此操作的方法。
String fileName = "f:/Data.txt";
int[] sums = null;
Scanner scanner = null;
try {
scanner = new Scanner(new File(fileName));
} catch (Exception e) {
e.printStackTrace();
}
现在字段已经初始化并且文件已成功打开,您可以处理文件了。
sums
字段为空,这是第一次通过所以在第一行中读取,跳过第一个int,并创建一个分配给int array
的sums
。int
,并将该行的其余部分作为整数添加到相应的总和列中。while (scanner.hasNextLine()) {
if (sums == null) {
sums = Arrays.stream(scanner.nextLine().split("\\s+"))
.skip(1)
.mapToInt(Integer::parseInt).toArray();
} else {
scanner.nextInt(); // skip first value
for (int i = 0; i < sums.length; i++) {
sums[i] += scanner.nextInt();
}
}
}
System.out.println(Arrays.toString(sums));
版画
[4, 7, 10, 13, 16, 19, 22, 25, 28]
注意:由于您没有指定如何处理同一二维数组的不同行长度,因此这仅适用于每行长度相同的情况。否则将抛出
IndexOutOfBounds
异常。