繁体   English   中英

从文本文件中按字母顺序对数组进行排序,然后放到另一个文件中

[英]Sort Array from text file alphabetically then out put to another file java

我正在做一项作业,我需要使用扫描仪从文件中读取文本。 然后将其编写成一个字符串数组的循环。 并使用数组。 sort方法,按字母顺序对数组进行排序。 之后,它将数组打印到输出文件。 还必须在命令行上显示它。 输入文件上的句子是“是或不是那个问题”,它必须逐字显示在新行上。 这是我到目前为止所拥有的,但是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的API),然后将小写单词分配给String数组的元素。

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

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

因为您读了一行,所以对其进行排序并再次覆盖! 而且我更喜欢使用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()]);

感谢蜘蛛鲍里斯的提示。

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

public static void main(String[] args) throws IOException {
  try (Scanner input = new Scanner(new File("input.txt"))) {
     List<String> inputText = new ArrayList();
     while (input.hasNextLine()) {
         inputText.add(input.nextLine());             
     }
     Arrays.sort(inputText);
     for (String str : inputText) {
          System.out.println(str);
     }            
 }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM