2015-09-24 66 views
1

我的任務是從輸入文件test.txt中讀取,這個文本有一些句子。 我需要用一個構造函數和三個方法編寫一個類。 其中之一必須扭轉句子中單詞的順序。顛倒陣列列表不能正常工作

import java.util.*; 
import java.io.*; 

public class Reverser { 


Scanner sc3 = null ; 


//constructor takes input file and initialize scanner sc pointing at input 
public Reverser(File file)throws FileNotFoundException, IOException{ 



sc3 = new Scanner (file); 
} 



//this method reverses the order of the words in each line of the input 
//and prints it to output file specified in argument. 
public void reverseEachLine(File outpr)throws FileNotFoundException, IOException{ 

    // ArrayList<String> wordsarraylist = new ArrayList<String>(); 

    while(sc3.hasNextLine()){ 
     String sentence = sc3.nextLine(); 
     // int length = sentence.length(); 
     String[] words = sentence.split(" "); 


     // wordsarraylist.clear(); 
     List<String> wordsarraylist = new ArrayList<String>(Arrays.asList(words)); 
     Collections.reverse(wordsarraylist); 

     FileWriter writer = new FileWriter(outpr,true); 

     for(String str: wordsarraylist) { 
      writer.write(str + " "); 
      } 

     writer.write(System.lineSeparator()); 
     writer.close(); 
    } 


} 


} 

我已經刪除了其他兩種方法,但它們不會干擾這個方法。 這是我的主:

import java.io.*; 

public class DemoReverser { 
    public static void main (String [] args) 
     throws IOException, FileNotFoundException { 
     Reverser r = new Reverser(new File("test.txt")); 

     r.reverseEachLine(new File("out2.txt")); 
    } 
} 

的問題是,在執行結束我的輸出文件包含了同樣的事情。這不是顛倒秩序。怎麼來的?不是Collections.reverse()顛倒順序?所以當我打印它時,我應該反過來說這些話嗎?我也需要使用數組列表。

這是我的輸入文件:

This is just a small file. That 
has some lines of text. 
If we are successful, these 
lines will be 
reversed. 
Let's hope for the best! 

我應該在我的輸出得到這個:

That file. small a just is This 
text. of lines some has 
these successful, are we If 
be will lines 
reversed. 
best! the for hope Let's 

但我得到這個:

This is just a small file. That 
has some lines of text. 
If we are successful, these 
lines will be 
reversed. 
Let's hope for the best! 
+2

請出示樣品輸入,輸出樣本,期望輸出,理想的解決您的代碼格式化 - 的縮進現在都是這個地方。 (順便說一下,爲什麼不在每次迭代中重新創建輸出文件?爲什麼不讓作者全天打開?) –

+1

順便說一下,代碼適用於我。用「第一秒」和「第三四」行輸入文件,我得到了「第二個第一」和「第四個三分之一」的輸出文件,完全如預期。 –

+0

試過了。它也適用於我。 – SWiggels

回答

0

嘗試使用此代碼方法reverseEachLine,它工作正常。不要在構造函數中構造Scanner

公共類MyReverser {

private File inputFile; 

public MyReverser(File file) { 
    this.inputFile = file; 
} 

public void reverseEachLine(File outpr) throws FileNotFoundException, IOException { 
    Scanner sc = new Scanner(inputFile); 

    ArrayList<List<String>> wordsarraylist = new ArrayList<List<String>>(); 
    while (sc.hasNextLine()) { 
     String sentence = sc.nextLine(); 

     List words = Arrays.asList(sentence.split(" ")); 
     Collections.reverse(words); 
     wordsarraylist.add(words); 
    } 

    FileWriter writer = new FileWriter(outpr, false); 
    for (List<String> list : wordsarraylist) { 
     for (String string : list) { 
      writer.append(string + " "); 
     } 
     writer.append(System.lineSeparator()); 
    } 
    writer.flush(); 
    writer.close(); 
} 

}

我已經在這裏找到答案全碼java cannot create file by 3 methods