现在,我正在使用此方法来检查用户是否刚刚输入了带有错误参数的命令:
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”被视为一个参数,但它实际上属于命令本身。
如果使用仅键入“添加”,则错误消息为“无效参数”。相反,错误消息应该更精确,并告诉他该命令不存在(因为只有“添加曲目”或“添加开关”)。
有人知道如何区分一个单词和两个单词的命令吗?用户还可以使用由三个单词组成的命令delete rolling stock <argument>
。
总而言之,因此有必要区分一个,两个和三个单词的命令。
String.split("\s+")
将您在空白处的输入分割为一个数组。您可以查询该数组的长度,然后知道您的输入包含多少个单词。