对于一项作业,我需要创建一个可以使用简单功能(例如ADD,SUB,LOAD,STORE和JUMP)的基本处理器
作为输入,我必须使用文本文件,解析20个不同的命令,然后执行它们。
我的问题是如何最好地解析字符串,将它们与相应的命令匹配,然后执行它们?
例如,我可以逐行解析文件,对字符串进行标记,通过包含所有命令的大型if-else语句发送标记,然后通过为每个命令创建一个类来调用这些命令(之前),然后执行该类。
但是我认为这不是解决问题的最佳方法。有没有更好的方法,或者我可以在示例中改善某些地方?
答案 0 :(得分:3)
将命令作为界面并将其映射到String
。
interface Command{
void execute();
}
Map<String, Command> map = new HashMap<>();
接下来相应地映射命令的所有实现:
map.put("ADD", () -> System.out.println("Calling Add"));
然后在标记线之后,只需搜索地图并执行命令,别忘了检查命令是否存在。
for (String token : tokens){
map.getOrDefault(token, () -> System.out.println("Command " + token + " not found")).execute();
}
答案 1 :(得分:0)
根据您在后续评论中所述的格式,我将使用Scanner
类读取由空格分隔的每一行,因为这是文本输入中的分隔符。
从那里,您可以使用switch语句根据从文本输入中提取的字符串来决定要执行的操作。由于您仍然必须为每个命令编写逻辑,因此switch语句看起来比巨大的if-else噩梦更干净
编辑:
我还将阐明如何进一步执行此操作:
Scanner reader = new Scanner(new File("ints.txt"));
while (reader.hasNext()){
Scanner parser = new Scanner(reader.nextLine());
parser.useDelimiter(" ");
//access each piece of the command by using parser.next();
}