按字母顺序从文本文件中排序数组,然后输出到另一个文件java

时间:2016-02-24 16:34:10

标签: java arrays list sorting text-files

我正在做一项任务,我需要使用扫描仪从文件中读取文本。然后将它写在一个循环中,形成一个字符串数组。并使用数组。 sort方法按字母顺序对数组进行排序。之后,它将数组打印到输出文件。还必须在命令行上显示这一点。输入文件上的句子是“是或不是那个问题”它必须在新行上逐字逐句显示。这是我到目前为止,但排序方法不是排序它只是读取数组?

public static void main(String[] args) throws IOException {

    try {
        try (Scanner input = new Scanner(new File("input.txt"))) {

            while (input.hasNextLine()) {

                String[] str = {input.next().toString()};
                Arrays.sort(str);

                for (String stringArray : str) {
                    System.out.println(Arrays.toString(str));
                }
            }

        }
    } catch (Exception ex) {
    }

}

万一我可能不完全明白我在问这是关于完整程序到底要做什么的说明。现在我只是想让排序方法起作用。

创建一个字符串数组来存储从输入文件中读取的字。您可以假设输入文件将包含10000个字或更少。

使用扫描仪读取输入文件。在循环的标题中,调用Scanner对象上的hasNext()方法。只要文件包含更多字符串且数组尚未填充,就继续循环。

在循环体中,调用Scanner对象上的next()方法。此方法返回一个String。将其转换为小写(有一个执行此操作的String方法 - 请参阅String for String),然后将小写字分配给String数组的元素。

当循环读完文件后,调用方法Arrays.sort(...),将String数组作为参数传递给此方法。

使用PrintWriter将已排序数组的内容写入另一个文件。您将需要使用循环来编写数组的元素。在此循环中,编写一些代码以确保不会将同一个单词多次写入输出文件。使用变量保存已写入文件的最后一个单词。在您编写下一个单词之前,请将其与最后一个单词进行比较,并仅在它不同时才写入。

2 个答案:

答案 0 :(得分:3)

因为您读了一行,所以对其进行排序并再次覆盖它!我更喜欢用BufferedReader读取并添加到ArrayList。

FileReader fileReader = new FileReader("input.txt");
List<String> lines;
try (BufferedReader bufferedReader = new BufferedReader(fileReader)) {
    lines = new ArrayList<>();
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        lines.add(line);
    }   
}
Collections.sort(lines);

您可以添加未知数量的项目,无需处理数组大小。

如果您真的想使用数组,请将此行添加到代码末尾:

String[] array = lines.toArray(new String[lines.size()]);

感谢Boris the Spider提示。

答案 1 :(得分:1)

如果认为这是你想要的(但如果文件很大,请尝试使用一些Sorted集合):

R 1004R1004R1004R1004R1004R1004R1004R1004R1004R1004
R 1004R1004R1004R1004R1004R1004R1004R1004R1004
R 1004R1004R1004R1004R1004R1004R1004R1004
R 1004R1004R1004R1004R1004R1004R1004
R 1004R1004R1004R1004R1004R1004
R 1004R1004R1004R1004R1004
R 1004R1004R1004R1004
R 1004R1004R1004
R 1004R1004
R 1004

}