簡體   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