2015-10-08 96 views
0

我試圖讀取數量不定的字符到我的數據結構中使用readChar()從algs4 StdIn.java。可能的輸入行數量也是未知的,應該忽略空格/製表符。while循環使用標準輸入

例如,樣品輸入

ABC D 
EF 

應當讀作

ABDCEF 

到我的結構。

我很難找到一個合適的循環來獲取StdIn來執行我想要的操作,而不是讓我陷入無限循環。

+1

你怎麼想它採取行動

public static void main(String[] args) { StringBuffer sb = new StringBuffer(); String[] lines = StdIn.readAllLines(); for (int i = 0; i < lines.length; i++) { String line = lines[i]; char[] charArray = line.toCharArray(); for (int j = 0; j < charArray.length; j++) { char c = charArray[j]; if (c != ' '){ sb.append(c); } } } System.out.println(sb.toString()); } 

與冉呢?它應該結束於角色嗎?它是否要求是/否的答案繼續?需要比這更多的細節。 – Ceelos

+0

只有當沒有更多輸入被讀取時,循環纔會結束,即以空格開始的新行。 – TheNotoriousWMB

回答

1

文件爲您提供了相當多的那個。只需使用readAllLines,然後通過StringBuffer.append()將它們合併爲一行即可。所以你迭代每一行,然後迭代每行中的每個字符。如果它不是空格,請將其附加到StringBuffer。最後打印出StringBuffer()的toString。該代碼有條款來處理換行符(\ n)並返回(\ r)。

ABC DEF 
XYZ 

它輸出:

ABCDEFXYZ 
1

打字輸入之後,你將不得不敲Ctrl-Z(至少在Eclipse中運行Windows)來告訴STDIN類,有沒有更多的輸入

StringBuilder sb = new StringBuilder(); 
    char c; 
    while (StdIn.hasNextChar()) { 
     c = StdIn.readChar(); 
     if (c != '\n' && c != '\r' && c != ' ') { // plus add the unicode whitespace characters mentioned in the top comment 
      sb.append(c); 
     } 
    } 

    System.out.println(sb.toString());