Сейчас я использую этот метод, чтобы проверить, вводил ли пользователь команду с неверными аргументами:
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>
«дорожка» рассматривается как аргумент, но она действительно принадлежит самой команде.
Если в поле «Добавить» используется только слово «error», появляется сообщение об ошибке «Недопустимые аргументы». Вместо этого сообщение об ошибке должно быть более точным и сообщать ему, что эта команда не существует (поскольку есть только «добавить дорожку» или «добавить переключатель»).
Кто-нибудь знает, как отличить guish между командами из одного слова и из двух слов? Пользователь также может использовать команду delete rolling stock <argument>
, которая состоит из команды из трех слов.
В общем, поэтому необходимо различать команды из одного, двух и трех слов.