Похоже, что каждая строка в AL может быть просто командой или командой и вводом для команды.
Я думаю, вы можете использовать метод split
здесь:
String[] parts = listString.split(" ");
Если размер parts
равен одному, это означает, что это просто команда, в противном случае parts[0]
- это команда, а остальные - ввод для этой команды.
Сделайте поиск с ним:
Directive directive = commandHash.get(parts[0]);
Тогда, если возвращается Directive
, тогда
- Если длина
parts
равна 1, просто наберите directive.execute()
.
- В противном случае сформируйте входные данные вместе с остальными
parts
и выполните directive.execute(input)
.
Если это не так, возможно, я не понял, что вы пытаетесь сказать.
Также см. String
, здесь есть все виды методов, которые вы можете использовать здесь.
Обновление:
public interface Directive {
void execute(String input);
}
public class EndDirective implements Directive {
@Override
public void execute(String input) {
// input will be neglected here
// just do whatever you supposed to do
}
}
public class PrintlnDirective implements Directive {
@Override
public void execute(String input) {
// input will be used here
// you might want to check if the input is null here
// and write the code accordingly
System.out.println(input);
}
}
С этим вы можете сделать directive.execute(null);
, когда у вас нет ввода, потому что вы Directive
либо игнорируете ввод, либо используете его (может также обрабатывать нуль, если они получают ноль, когда ожидают некоторый ввод) .