2012-06-24 122 views
0

我正在編寫一個命令行Java應用程序。我有一個處理終端輸入/輸出的類。我想問一個簡單的是/否(是/否)問題。 這是我的代碼:立即返回新行的命令行

public boolean yn(String prompt) { 
    // ask a yes/no question 
    out(prompt); 
    try { 
     while(true) { 
      char result = (char) br.read(); 
      out("\n"); 
      if(((Character) Character.toLowerCase(result)).toString().equals("y")) { 
       return true; 
      } else if(((Character) Character.toLowerCase(result)).toString().equals("n")) { 
       return false; 
      } 
      // not y or n 
      out(Messages.informYN); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

BR是一個BufferedReader設置爲

br = new BufferedReader(new InputStreamReader(System.in)); 

簡單地輸出文本

System.out.print(text); 

的問題br.read( )在沒有輸入時第一次立即返回一個新行給出。

我對Java相當陌生,所以請放心。

+0

您是否嘗試使用readln:'炭結果= br.readLine()的charAt(0);' –

+0

此外,可告訴你代碼你在哪裏調用這個方法? –

+0

@HovercraftFullOfEels readln代碼拋出一個索引超出範圍的異常。調用它的行很簡單''布爾cont = terminal.yn(Messages.noMatchConfirmation);' –

回答

0

此方法從控制檯讀取直到[確定]被按下:

public final String ConsoleReadln(String promptStr) { 
    StringBuffer retSb = new StringBuffer(); 

    try { 
     System.out.print(promptStr); 
     byte[] buf = new byte[1]; 
     System.in.skip(System.in.available()); 
     int i = 0; 
     char c = 0; 
     do { 
      if (System.in.read(buf,0,1) > 0) { 
       i = (int) buf[0]; if (i<0) i += 0x100; c = (char) i; 
       if ((c != '\n') && (c != '\r')) retSb.append(c); 
      } 
     } 
     while ((c != '\n') && (c != '\r')) ; 
    } // try 
    catch (Exception ex) { 
    } 
    return retSb.toString(); 
}