现在,我正在使用此方法来检查用户是否刚刚输入了带有错误参数的命令:
private boolean relatedCommand(String input) {
// make sure the split afterwards has at least size one
if (input.matches(" .*")) {
return false;
}
final String command = input.split(" ".toString())[0];
return COMMAND_PACKAGE
.keySet()
.stream()
.map(Pattern::toString)
.anyMatch(patternText -> patternText.startsWith(command + " ");
}
(COMMAND_PACKAGE 包含所有已注册的命令)
现在,这对于单字命令来说非常有效。例如get <argument1> <argument2>
, remove <argument1>
.
但是,我目前正在开发一个同时具有单字和双字命令的项目。
以下是一系列实际上不适用于此方法的命令:
add track <argument1>
, add switch <argument1>
, step <argument>
。在本例中,对于命令 add track <argument1>
,“track”被视为一个参数,但它确实属于命令本身。
如果仅输入“add”,则错误消息为“无效参数”。相反,错误消息应该更准确,并告诉他该命令不存在(因为只有“添加轨道”或“添加开关”)。
有人知道如何区分单字命令和双字命令吗?用户还可以使用命令delete rolling stock <argument>
它由三个字的命令组成。
总而言之,因此有必要区分一字、二字和三字的命令。
最佳答案
说实话,解决这个问题最简单、最有效的方法是创建包含两个或三个单词的命令列表,然后简单地在单独的方法中执行匹配,这样,如果您命中某个关键字,该列表就是该命令的一部分对于较长的命令,您检查下一个单词,看看它是否是您期望的命令的一部分。
根据命令的具体规范等,您也许可以使用 HashMap<String, HashMap<String, String>>
来表示命令。这样,您可以简单地执行一些操作,例如将前缀存储为键,然后将后缀存储为值。
关于java - 区分一字、二字和三字命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60250206/