在java中汇总文本文件的列

时间:2013-01-26 19:41:00

标签: java

我有一个文本文件:

1 2 3 4 5

6 7 8 9 1

8 3 9 7 1

9 3 4 8 2

8 7 1 6 5

其中每个数字由制表符分隔。

我的问题是,是否有一种简单的方法可以使用java对数字列求和?我希望它总和1 + 6 + 8 + 9 + 8,2 + 7 + 3 + 3 + 7等。我正在使用以下文件阅读文件:

 public static boolean testMagic(String pathName) throws IOException {
    // Open the file
    BufferedReader reader = new BufferedReader(new FileReader(pathName));

    // For each line in the file ...
    String line;
    while ((line = reader.readLine()) != null) {
        // ... sum each column of numbers
        }

    reader.close();
    return isMagic;
}

public static void main(String[] args) throws IOException {
    String[] fileNames = { "MyFile.txt" };

}

3 个答案:

答案 0 :(得分:2)

是已知或可变的列数?您可以创建一个求和数组并将每行解析为整数并将其添加到正确的总和中。

// For each line in the file ...
String line;
int sums[5]; //Change to the number of columns
while ((line = reader.readLine()) != null) {
    String tokens[] = line.split("\t");
    for(int i = 0; i < 5; i++)
    {
       sums[i] += Integer.parseInt(tokens[i]);
    }
 }

如果您事先不知道列数,请使用ArrayList并以不同方式执行第一行,以便您可以计算出列数。

答案 1 :(得分:1)

while - 循环中拆分字符串(以\t分隔),然后解析int值。

答案 2 :(得分:1)

从文本文件中解析数字的最简单方法是java.util.Scanner,如下所示:

import java.util.Scanner;
import java.io.File;

public class Summer {
    public static void main(String[] args)
    throws Exception
    {
        Scanner sc = new Scanner(new File("file.txt"));
        while (sc.hasNext()) {
            System.out.println(sc.nextInt());
        }
    }
}

由于您想逐行总结,您可以使用两个扫描仪:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class Summer {
    public static void main(String[] args)
    throws Exception
    {
        /* List to hold sums */
        ArrayList<Integer> sums = new ArrayList<Integer>();

        Scanner sc_file = new Scanner(new File("file.txt"));
        while (sc_file.hasNextLine()) {
            Scanner sc_line = new Scanner(sc_file.nextLine());

            /* Process each column within the line */
            int column = 0;
            while (sc_line.hasNext()) {
                /* When in column n, make sure list has at least n entries */
                if (column >= sums.size()) {
                    sums.add(0);
                }
                sums.set(column, sums.get(column) + sc_line.nextInt());
                column++;
            }
        }

        System.out.println(sums);
    }
}