我的应用程序中有一个文本框,用户可以输入任何内容.我正在创建一个控制器,该控制器根据关键字解释一些命令.
用户可以选择是否设置密码.并据此,我的解释器将不需要密码.
例如,如果设置了密码并且用户输入:“ password1 show list”.
解释器在第一个单词中检查密码,然后在命令(显示)中检查密码,然后在参数(列表)中检查密码.
如果未设置密码,则用户输入“显示列表”,并且口译员可以理解.
我当前的代码是:
// 'words' is a String array which contains the user input.
if (passwordEnabled()==true) {
if (words[0].contentEquals(getpassword())
&& words[1].contentEquals("show")
&& words[2].contentEquals("list")) {
// Perform action
}
}
else {
if (words[0].contentEquals("show")
&& words[1].contentEquals("list")) {
// Perform action
}
}
我的问题是,有没有更有效/更好的方式来处理命令?我敢肯定,我的方法很粗鲁.
解决方法:
如果您试图设计基于“语言”的系统,并在其中询问命令,则应根据系统复杂性考虑两种可能的方法:
>建立系统的有限自动机.您的if语句是这种结构的最基本形式,但将其定义为实际的自动机,即您具有状态以及将您移至另一个状态的命令-是一种非常干净且通用的方法.
>构建语法解释器/编译器.将正确的命令定义为语法(编译器)规则将使您在表达可能的命令和动作时有更多的能力.
当然,这些不是交替的解决方案-为语言建立语法是非常广泛的事情,应该使用它来解析命令,而有限状态自动机则充当内部存储器和可能动作的定义.