2014-03-31 62 views
0

我有這樣的一段代碼輸入的BufferedReader如何終止其

private String getMessage(BufferedReader in) throws IOException{ 

    StringBuilder sb = new StringBuilder(); 

    while(true){ 
     char pom = (char) in.read(); 
     sb.append(pom); 

     if (sb.toString().contains("\r\n")) {     
       String result = sb.toString(); 
       result = result.replace("\r\n", ""); 
       return result; 
     } 
    } 
} 

我希望用戶能夠在控制檯上寫一些消息。當他寫'\ r \ n'時,控制檯應該結束輸入。但這不起作用......你有沒有提示可能是什麼問題?

而在aditional中,我不想使用in.close();因爲我以後需要這個輸入。

+0

你調試的程序,看看它的失敗? 「這不起作用」是什麼意思? –

+0

好吧,我寫,它什麼也沒做。 「qdio \ r \ ndosvp ...」並且可以繼續寫入。 – user3472536

+0

http://stackoverflow.com/questions/2828291/readline-like-library-for-java可能是有趣的。 –

回答

0

試試這個:

private String getMessage(BufferedReader in) throws IOException{ 
    return in.readLine(); 
} 

OK,如果你想通過字節做字節,那麼你可以試試這個:

private String getMessage(BufferedReader in) throws IOException{ 
    StringBuilder sb = new StringBuilder(); 
    char prev = (char) 0; 
    char cur = in.read(); 
    while (prev != '\r' || cur != '\n') { 
     sb.append(cur); 
     prev = cur; 
     cur = in.read(); 
    } 
    return sb.toString(); 
} 
+0

是的,這將是一個很好的解決方案,但由於某些原因,我需要逐字節讀取信息...... – user3472536

+0

@ user3472536,要逐字節讀取,您需要一個'InputStream'。 '閱讀器讀取字符,而不是字節。 –

+0

和我的代碼一樣。這是我在控制檯上寫的,可以繼續寫下來。 http://d.pr/i/oNLu – user3472536