2016-02-24 33 views
1

嗨即時做一個任務,我需要從文件中使用掃描儀讀取文本。然後把它寫入一個循環中,該循環產生一個字符串數組並使用arrays.sort方法按字母順序對數組進行排序。之後它將數組打印到輸出文件。也必須在命令行上顯示。輸入文件上的句子是「是或不是那個問題」,它必須逐字逐個顯示在一行上。這是我迄今爲止,但排序方法不排序它只是讀數組?按字母順序從文本文件中排序數組然後輸出到另一個文件java

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。將其轉換爲小寫字母(有一種方法可以實現此功能 - 請參閱字符串的API),然後將小寫字母分配給字符串數組的一個元素。

當循環完成讀取文件時,調用方法Arrays.sort(...),將String數組作爲參數傳遞給此方法。

使用PrintWriter將排序數組的內容寫入另一個文件。您將需要使用循環來編寫數組的元素。在此循環中,編寫一些代碼以確保相同的單詞不會多次寫入輸出文件。使用變量保存已寫入文件的最後一個單詞。在你寫下一個單詞之前,把它和最後一個單詞進行比較,只有當它不同時才寫。

+2

請提供示例輸入/輸出。目前你正在閱讀**每行**,然後對一個** singleton數組**進行排序(顯然什麼都不做),然後將該行寫回。 –

回答

1

如果認爲這是你想要的東西(但如果文件很大的嘗試使用,而不是一些分類收集):因爲你讀一行

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

}

+2

'Arrays.sort(輸入);' - 不。 –

+0

不,我試過,仍然只顯示它爲1行 –

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

相關問題