0

我有一个文本文件,内容如下:

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" };

}

4

3 回答 3

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]);
    }
 }

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

于 2013-01-26T19:48:29.830 回答
1

while-loop 中拆分字符串(用 分隔\t)然后解析int值。

于 2013-01-26T19:45:22.050 回答
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);
    }
}
于 2013-01-26T19:48:47.237 回答