2013-10-10 171 views
-2

我正在閱讀來自單獨文件的輸入,而且我無法弄清楚如何濃縮一堆空白行,而只是打印一行。例如,如果我的輸入文件有兩個由14個空白行分隔的段落,則這些段落應該由一個空白行而不是14個空白行作爲輸出。如何將一串連續的空行壓縮到一個空白行中?

+4

一些代碼嗎? – maksimov

+0

你有什麼嘗試?作爲一個提示,如果你將整個文件讀入一個'String'中,那麼有14條空行的部分看起來就像'\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n',但應該看起來像'\ n \ n'。 – nhgrif

+1

當您讀取空行時,如果上一行輸入行爲空白,請不要輸出。請閱讀下一個。 –

回答

2

在逐行閱讀時,檢查每一行以查看它是否爲空(匹配正則表達式^\s*$line.trim().isEmpty())。當輸入行爲空時,設置一個布爾值,例如seenBlankLine爲true。在後續的空行上,如果布爾值爲true,則不要處理該行。請記住,當遇到非空白行時,將布爾值設置爲false。由焦

+0

@HovercraftFullOfEels更新,謝謝。 –

0

讀取字符,避免重複回車換行符

InputStream is = null; 
char c; 
int i; 

try { 
    is = new FileInputStream('/path/to/file'); 

    StringBuffer sb = new StringBuffer(); 
    while ((i = is.read()) != -1) { 
     c = (char)i; 

     if (c == '\n' || c == '\r') { 
      int length = sb.length(); 
      if (length == 0 || (length != 0 && sb.charAt(length - 1) != '\n')) { 
       sb.append(c); 
      } 
     } else { 
      sb.append(c); 
     }  
    } 
} catch (Exception e) { 
    ... 
} 
return sb.toString(); 
+0

你的是一個非常低級的解決方案。我認爲更高層次的解決方案會更好,比如使用StringBuilder,Scanner和while循環,並在需要的地方調用「continue」。這樣做我敢打賭,這個代碼會減少60%以上,同時使它更具可讀性,適應性和可調試性。另外,爲什麼使用StringBuffer而不是StringBuilder。哪裏可能有一個可能的線程問題,這個局部變量? –

+0

@Hovercraft完整的鰻魚:對!我只是想展示不同的東西! :) – user278064

相關問題