在java中询问用户输入有效命令

时间:2018-05-02 17:03:06

标签: java

我正在开发自己的shell(命令提示符)。 [当
用户输入内置命令,shell需要相应地搜索和执行相应的代码。]

我使用命令split和命令参数创建了我的代码,以便存储我的命令。但有一点我很困惑的是,制作一个不在列表中的命令。 我想使用if语句打印无效注释(例如)

if (command!="exit")||(command!="about")||(command!="date")||(command!="time")||(command!="hist")||(command!="notepad")
                    ||(command!="")||(command!="hist -h")||(command!="hist -l")||(command!="c"){

System.out.println("invalid command");
}

但如果有大量的命令行,这个说法太多了。那么有一种简单的方法来实现它吗?

2 个答案:

答案 0 :(得分:1)

如果此java和所有命令都是字符串并且输入command也是一个字符串,您可以通过创建有效命令列表并执行包含检查来简化您尝试执行的操作。

List<String> validCommands = Arrays.asList("exit", "about", "date");
if (!validCommands.contains(command)) {
    System.out.println("invalid command");
}

话虽如此,有更好的方法来维护java程序之外的有效命令列表,例如属性文件和来自该文件的有效命令的加载列表。这将使您的程序更易于维护。

答案 1 :(得分:0)

使用Map<String, Command>来跟踪可用的命令。如果命令不在地图中,则它无效。例如:

public class Shell {
    private final Map<String, Command> supportedCommands;

    public Shell(Map<String, Command> supportedCommands) {
        this.supportedCommands = supportedCommands;
    }

    public void execute(String command, String[] args) {
        Command c = supportedCommands.get(command);
        if (c == null) {
            System.out.println("invalid command");
        } else {
            c.execute(args);
        }
    }


    public interface Command {
        public void execute(String[] args);
    }

}