如何合并N对两个文本文件进行排序

时间:2018-02-12 03:36:57

标签: java sorting merge

我必须阅读两个看起来像这样的文本文件......

FileOne:10 1 2 3 4 5 67 75 47 18

FileTwo:5 65 74 57 68 28 38

第一个数字表示我应该使用多少个整数填充数组的计数。

我需要读取文件的第一行,然后使用该数字填充两个数组,但指定的元素数量很多。

我已经想出如何读取两个文本文件并将它们连接在一起,但是我无法弄清楚如何只从文件中获取第一个数字并使用它来确定在此之后我应该使用多少个数字。

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


public class ReadData {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Please enter the first file name: ");
        String input = s.nextLine();
        System.out.println("Please enter the second file name: ");
        String input2 = s.nextLine();

        int[] data = readFiles(input);
        int[] data2 = readFiles(input2);
        //System.out.println(Arrays.toString(data));
        //System.out.println(Arrays.toString(data2));
        System.out.println(Arrays.toString(concat(data, data2)));
    }   

    public static int[] readFiles(String file) {

        try {

            File f = new File(file);
            Scanner s = new Scanner(f);
            int counter = 0;
            while(s.hasNextInt()) {
                counter++;
                s.nextInt();
            }
            int[] arr = new int[counter];

            Scanner s1 = new Scanner(f);

            for(int i = 0; i < arr.length; i++)
                arr[i] = s1.nextInt();

            return arr;
        }
        catch(Exception e) {
            return null;
        }   
    }
    static int[] concat(int[]... arrays) {
    int length = 0;
    for (int[] array : arrays) {
        length += array.length;
    }
    int[] result = new int[length];
    int pos = 0;
    for (int[] array : arrays) {
        for (int element : array) {
            result[pos] = element;
            pos++;
        }
    }
    return result;
}
}

1 个答案:

答案 0 :(得分:1)

对于初学者,我建议将整行读作单个字符串,然后使用解析器解析它,该解析器将使用空格作为分隔符。您将在更优雅的解决方案中获得包含所有号码的DS。 (Java解析简单解决方案:http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html

一旦你有了包含数字的DS,你可以随意迭代它,记住第一个值决定了DS上未来迭代的数量。

假设你使用java 8,我建议使用流功能来实现:http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/

如果你需要任何更好的解释和好运,请评论。