2013-02-02 56 views
0

我正在開發一個應用程序,它必須從用戶的終端接收多個輸入,同時優雅地處理無效輸入並提示用戶重新輸入它。我的首先想到的是有一個while循環,它的主體將接受輸入並驗證它的有效性,當它獲得有效輸入時設置一個標誌。該標誌將標誌應用程序所在的階段,並將確定接下來需要什麼類型的輸入,並且還將用作循環的終止條件。從終端捕獲System.in事件

雖然功能,這似乎相當不雅,我想知道是否有一種方法,我可以簡單地編寫一個函數,每當按下返回鍵指示有新的輸入被解析時調用。沿着這也許可以通過一些extending Java類來實現,並重新實現它的一個的

public class Interface { 
    public void receiveInput(final String input){ 
     // Parse 'input' for validity and forward it to the correct part of the program 
    } 
} 

東西線的,通常會處理這樣的事件的功能,但是這也許是我的C++背景談起。

我不允許使用除構建和單元測試需要的任何外部庫。

回答

2

雖然從控制檯讀取,你可以使用的BufferedReader

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

,並通過調用readline的功能,它會處理新行:

String readLine = br.readLine(); 

可以肯定的是有一個類中,將有是一個讀取信息並繼續的功能。

這裏是供您參考

public class TestInput { 


    public String myReader(){ 
     boolean isExit = true; 
     while (isExit){ 
      System.out.print("$"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

      try { 
       String readLine = br.readLine(); 
       if (readLine != null && readLine.trim().length() > 0){ 
        if (readLine.equalsIgnoreCase("showlist")){ 
         System.out.println("List 1"); 
         System.out.println("List 2"); 
         System.out.println("List 3"); 
        } if (readLine.equalsIgnoreCase("shownewlist")){ 
         System.out.println("New List 1"); 
         System.out.println("New List 2"); 
        } if (readLine.equalsIgnoreCase("exit")){ 
         isExit = false; 
        } 
       } else { 
        System.out.println("Please enter proper instrictions"); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
     return "Finished"; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     System.out.println("Please Enter inputs for the questions asked"); 
     TestInput ti = new TestInput(); 
     String reader = ti.myReader(); 
     System.out.println(reader); 
    } 

下面的代碼示例是輸出:

Please Enter inputs for the questions asked 
$showlist 
List 1 
List 2 
List 3 
$shownewlist 
New List 1 
New List 2 
$exit 
Finished 

希望這有助於。