В настоящее время я использую этот код для поиска команды, в которую вводит пользователь:
final Command command = commands.stream()
.filter(cmd -> input.startsWith(cmd.getName()))
.findAny()
.orElseThrow(() -> new InvalidInputException("unknown command"));
Каждый класс команд имеет свой собственный метод getName()
. Вот как выглядит метод getName()
для ExitCommand()
:
@Override
public String getName() {
return "exit";
}
К сожалению, для текущего потока "exittttttt"
также принимается. Я не могу использовать .equals(cmd.getName())
, потому что есть команды, которые имеют последующие аргументы после имени команды.
Например:
@Override
public String getName() {
return "delete track";
}
Но полная команда - delete track <id>
.
Кто-нибудь знает, как разрешить только имя команды, указанное в каждом методе getName()
, но также разрешить дополнительные аргументы?
РЕДАКТИРОВАТЬ:
Каждая команда имеет свой собственный метод getArguments()
. Метод вернет 0 для команды exit
и 1 для команды delete track
. Может быть, это можно использовать для решения этой проблемы?