2016-03-01 100 views
1

所以問題就在這裏。將文本文件轉換爲正確的格式。 問題的關鍵是我必須讀取一個文件,一個文本文件,其中包含該文本文件中的代碼。那個代碼有可怕的格式。格式化問題是,如果有像這樣的大括號{,則下一行不是右側4個空格,它只是在最左側。就像這樣:如何格式化此文本? java

while (blah blah blah) { 
sysout(blahblahblah); 

當它應該是這樣的:

while (blah blah blah) { 
    sysout(blahblahblah); 

還有的在2之間沒有其他差異的唯一規則是簡單地使它所以每次有一個大括號這樣{,確保下一行是4個右側的空格。反之亦然。所以每次都有這樣的大括號},下一行應該是左邊4個空格。我希望你們明白這一點。

這是我的問題。我學會了如何製作一個程序,將具有多個空格和多行的文本每次轉換爲一行一行。不是太難。

雖然如此,我必須保持一切都在同一條線上。所以如果有30行,我製作的新程序也是30行。我需要保持非常相似的間距,但簡單的區別是整個大括號。所以基本上,我只需要在右邊4個空格之後製作線條,然後執行相同的操作,如果它是}大括號,則在左邊4個空格。

那麼我該如何做到這一點?我不知道如何解決這個問題,而不會搞亂其他的東西。這是我必須做的簡單事情;只需將大括號後面的空格向右或向左移動4個空格,但我不知道使用什麼語法來完成此操作。謝謝!

編輯:這可能只是使它更容易。所以,基本上,所有線條都以右大括號,左大括號或分號結尾。無論。所以每當其中一個彈出時,它就是一行的結尾。所以,如果你知道如何讓它更容易,那麼我只是讓你知道。

+0

我真的不知道該去哪裏。我沒有最好的編碼詞彙。我不知道如何編輯某些行而不會搞亂其他行。我不想要一個完整的程序,只是一些建議,不管它的僞代碼,或其他。或者我應該使用什麼樣的循環或者說明。我不是爲了讓我爲我做功課,我只是沒有想法從哪裏開始,即使我確切知道結果應該是什麼。所以我沒有嘗試過任何東西,只想到我能做什麼,而且我很長一段時間都沒有想到這件事。 –

回答

0

有些程序會自動爲你做這件事,所以你不需要重新發明輪子。例如,在Eclipse中,輸入:ctrl-a(全選)ctrl-i(自動縮進)。

+0

這是一個學校作業。我的老師會輸入一個包含大量代碼的文本文件。我的輸出必須包含修改後的版本,並具有正確的間距。 –

+0

啊,所以你要求我們爲你做功課。 –

+0

我花了數小時思考如何做到這一點。我什麼也沒有提出。我只是想要一些指針。我沒有太多詞彙,我無法做到這一點。沒有機器可以幫助我解決這個問題。我從來沒有要求有人寫出來。但是,如何簡單地操作文本文件,以便在大括號之後,下一行是右側4個空格或左側。我沒有太多的詞彙,這可能是什麼在殺死我。但是,爲什麼要把某個人留在塵土裏,因爲他們做不了什麼。我已經說過,這不是一個讓別人爲我做我的手勢的陰謀 –

0

下面是一個僞代碼,你可以開始:

int indentLevel = 0; 
while(currentchar = nextchar != null){ 
    printCurrentChar 
    if(currentchar is '{'){ 
     indentLevel++; 
    }else if(currentchar is '}'){ 
     indentLevel--; 
    }else if(currentchar is '\n'){ 
     print indentLevel * 4 spaces 
    } 
} 

你可能需要處理逃脫括號等併發症雖然

0

你可以做到這一點很容易地使用正則表達式。如果你不知道它並計劃成爲程序員,那麼一定要學習它。這將爲你節省很多時間。

public class TextIndentator 
{ 

    public static void main(String[] args) throws IOException 
    { 
     File uglyText = new File("ugly.txt"); 
     System.out.println((uglyText.exists() && !uglyText.isDirectory()) ? getNiceText(uglyText) : "FILE \"ugly.txt\" at " + System.getProperty("user.dir") + " do not exists"); 
    } 

    static String getNiceText(File uglyText) throws IOException 
    { 
     // Opening file 
     FileInputStream inputStream = new FileInputStream(uglyText); 
     InputStreamReader isr = new InputStreamReader(inputStream); 
     BufferedReader reader = new BufferedReader(isr); 
     StringBuilder builder = new StringBuilder(); 
     StringBuffer buffer = new StringBuffer(); 

     // Algorithm starts here 
     String line; 
     boolean checkNext = false; 
     while ((line = reader.readLine()) != null) 
     { 
      if(checkNext) 
      { 
       // If previous line finished with '{' (And optionally with some whitespaces after it) then, replace any amount (including zero) of whitespaces with 4 witespaces 
       builder.append(line.replaceFirst("\\s*", " ")); 
      } 
      else 
      { 
       builder.append(line); 
      } 
      // Check if line line finishes with { (And optionally with some whitespaces after it) 
      if(line.matches(".*\\{\\s*")) checkNext = true; 
      else checkNext = false; 

      //Append line separator at the end of line 
      builder.append(System.getProperty("line.separator")); 
     } 
     return builder.toString(); 
    } 

}