首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从终端捕获System.in事件

从终端捕获System.in事件
EN

Stack Overflow用户
提问于 2013-02-02 23:07:33
回答 1查看 115关注 0票数 0

我正在开发一个应用程序,它必须接收来自用户终端的多个输入,同时优雅地处理无效输入并提示用户重新输入。我的第一个想法是有一个while循环,它的主体将接受输入并验证它的有效性,当它获得有效输入时设置一个标志。此标志将标记应用程序所处的阶段,并将确定下一步需要哪种类型的输入,并且还将用作循环的终止条件。

虽然这是函数式的,但这看起来相当不优雅,我想知道是否有一种方法可以简单地编写一个函数,每当按下return键时就会调用该函数,以指示有新的输入需要解析。一些类似的东西

代码语言:javascript
运行
复制
public class Interface {
    public void receiveInput( final String input ){
        // Parse 'input' for validity and forward it to the correct part of the program
    }
}

也许这可以通过extending一些Java类并重新实现它的一个函数来实现,这些函数通常可以处理这样的事件,但这可能是我的C++背景知识。

除了构建和单元测试所需的库之外,我不允许使用任何外部库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 00:02:37

在从控制台读取时,您可以使用BufferedReader

代码语言:javascript
运行
复制
BufferedReader br = new BufferedReader( new InputStreamReader( System.in));

通过调用readLine函数,它将处理新行:

代码语言:javascript
运行
复制
String readLine = br.readLine();

您可以确定有一个类,其中将有一个读取信息并继续的函数。

下面是供您参考的示例代码

代码语言:javascript
运行
复制
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);
    }

下面是输出:

代码语言:javascript
运行
复制
Please Enter inputs for the questions asked
$showlist
List 1
List 2
List 3
$shownewlist
New List 1
New List 2
$exit
Finished

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14663227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档